找回密码
 注册
关于网站域名变更的通知
查看: 483|回复: 7
打印 上一主题 下一主题

[STM32] MODBUS通讯问题?

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-12-1 10:30 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
本帖最后由 Heaven_1 于 2022-12-1 17:53 编辑 . X! h1 a, @; n
( L2 T2 T) i$ s: T
大神们,我想把AD采样的数据Get_ADC_THR1_Value(ADC_Channel_10,20)赋值到MODBUS保持寄存器0X 0001中,该怎么操作?
, _+ O, B+ C8 u; T% m: Q

该用户从未签到

2#
发表于 2022-12-1 11:18 | 只看该作者
struct s3c_ts_regs {
3 n- F7 {% u" Hunsigned long adccon;8 V2 f7 y- Q- u% C3 U, Q1 B
};. G" z6 N1 L# K( h: R. ]3 u- ?9 d
static volatile struct s3c_ts_regs *s3c_ts_regs;
5 e2 ^, a/ C. Vs3c_ts_regs = ioremap(0x58000000, sizeof(struct s3c_ts_regs));
9 Z: ?1 U9 l9 E8 R3 Gs3c_ts_regs->adccon = (1<<14)|(49<<6);
+ j" f1 c/ V% B% F( t& ^/ q6 F参考一下吧!

点评

这个啥意识? 完全看不懂,能讲解下吗  详情 回复 发表于 2022-12-1 11:58

该用户从未签到

3#
 楼主| 发表于 2022-12-1 11:58 | 只看该作者
big_gun 发表于 2022-12-1 11:18
7 c) y7 a( V: B' ?' k5 C6 R! l8 P2 Jstruct s3c_ts_regs {
( w8 r8 y$ _# f. N" {unsigned long adccon;& a4 s7 M1 v! X# G$ O  i
};

" F  u/ \* r. a* |* `9 s这个啥意识?  完全看不懂,能讲解下吗! A/ k8 g4 }+ g& \* J9 ?& I+ c; A

该用户从未签到

4#
发表于 2022-12-1 17:57 | 只看该作者
ADC_Channel_10代表的是采样用的AD10通道,/ q+ |( {  T  Y2 O) n- W
条用这个函数会得到AD采样的值

点评

如何得到AD采样的值我知道,现在不清楚的是怎么把这个值给MODBUS的保持寄存器,然后用通讯的方式读出来  详情 回复 发表于 2022-12-1 18:14

该用户从未签到

5#
 楼主| 发表于 2022-12-1 18:14 | 只看该作者
Storm_change 发表于 2022-12-1 17:57* n7 ]7 Y; u% R; d
ADC_Channel_10代表的是采样用的AD10通道,) {; X( v6 K' n$ U( j  a5 |) V
条用这个函数会得到AD采样的值
" f/ n" u0 O. U) H
如何得到AD采样的值我知道,现在不清楚的是怎么把这个值给MODBUS的保持寄存器,然后用通讯的方式读出来
* f( _; k& X- [# G4 ^

该用户从未签到

6#
发表于 2022-12-5 13:34 | 只看该作者
读取ADC转换值$ r$ M) |& H; Z+ T3 Z3 R4 A0 _
设置规则序列通道以及采样周期的库函数是:0 M6 G$ i6 ?, y' v7 v6 i: `$ U
void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t
" K) o) E$ O9 N4 _/ aADC_Channel,uint8_t Rank, uint8_t ADC_SampleTime);
' R  I4 ]6 i9 w4 B' m& ~% D3 {  x/ x" O; r. M
ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_239Cycles5 );9 ~; f, F* I  `3 l8 ?, w
" ~2 F, ?0 c3 g( b2 _/ K
设置好规则序列通道及采样周期,接下来就要开启转换,由于我们采) X: m  |$ f$ F% g
用的是软件触发,库函数# C1 ?1 M9 }  x
void ADC_SoftwareStartConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState);2 y, v8 @$ U) w2 X( k* R
. H1 A9 U  J* n) \
开启转换之后,就可以获取ADC 转换结果数据,调用的库函数是:
5 h; |  |, i% B) k: p! e: s# Tuint16_t ADC_GetConversionValue(ADC_TypeDef* ADCx);. `$ u" |' C/ O2 m# i" S

, ^4 V5 T  F3 ]+ q获取 AD 转换的状态信息的库函数是:
+ X/ R: F) ?6 M, h% Z2 ~/ a& k) wFlagStatus ADC_GetFlagStatus(ADC_TypeDef* ADCx, uint8_t2 j4 u+ T1 e" Z
ADC_FLAG);
& p# J7 P6 `* r8 d+ n4 s$ `/ \1 s, D! F
8 U: o  K' P% K4 b例如我们要判断 ADC1 的转换是否结束,方法是:
: [9 z8 s2 h8 pwhile(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换结束0 n8 ^- r, q* J  q/ S
————————————————
' m+ k: M# A! \0 M0 G
& S5 e3 L( e: |! C4 ?+ k/ X0 f, x! \, U# A; |1 ^" W

点评

对的,流程很全,定义一个和返回值一样的变量,等待转换完就会直接得到采样的值  详情 回复 发表于 2022-12-5 13:37
  • TA的每日心情

    2019-11-20 15:01
  • 签到天数: 1 天

    [LV.1]初来乍到

    7#
    发表于 2022-12-5 13:37 | 只看该作者
    Storm_change 发表于 2022-12-5 13:34
    9 P1 ~2 U+ z) E* g* {6 o读取ADC转换值: r  X7 p- @( D- q8 ~3 [
    设置规则序列通道以及采样周期的库函数是:4 R) S+ j5 w/ C2 g9 U9 }
    void ADC_RegularChannelConfig(ADC_TypeDef*  ...
    * w2 c3 S# g+ ]$ Q& [& S
    对的,流程很全,定义一个和返回值一样的变量,等待转换完就会直接得到采样的值
    1 L5 P- b5 q% a* l& e9 {

    该用户从未签到

    8#
    发表于 2022-12-6 10:41 | 只看该作者
    这边有专业团队给您提供申请专利的方案开发,专家给您布局,薇zf15984496907】与其用泪水悔恨今天,不如用汗水拼搏今天。
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-7-18 19:35 , Processed in 0.140625 second(s), 32 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表