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

[STM32] MODBUS通讯问题?

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 Heaven_1 于 2022-12-1 17:53 编辑 ' _; K! o- t' x, C; L# \( F4 V( C7 g
4 A; A/ \- U. x8 H% v5 o5 R# z; \0 D/ X
大神们,我想把AD采样的数据Get_ADC_THR1_Value(ADC_Channel_10,20)赋值到MODBUS保持寄存器0X 0001中,该怎么操作?
) \, l- X% t/ f6 k+ ~/ _

该用户从未签到

2#
发表于 2022-12-1 11:18 | 只看该作者
struct s3c_ts_regs {  _# S& l% _7 e1 z* c8 M
unsigned long adccon;7 m/ ^7 s2 X4 H
};+ L8 S6 l1 @/ n" p2 M$ F
static volatile struct s3c_ts_regs *s3c_ts_regs;
( D$ o+ F  D" o/ x+ Z4 u0 qs3c_ts_regs = ioremap(0x58000000, sizeof(struct s3c_ts_regs));
' S9 W  Y" y9 u0 _: ss3c_ts_regs->adccon = (1<<14)|(49<<6);% }8 T$ |0 A! q: R' t& K, m0 a! O
参考一下吧!

点评

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

该用户从未签到

3#
 楼主| 发表于 2022-12-1 11:58 | 只看该作者
big_gun 发表于 2022-12-1 11:181 n8 n: Z+ S& d
struct s3c_ts_regs {/ o( Q% B( c; {# B0 R7 p
unsigned long adccon;
2 T1 T% O7 X- P- x};
: f  I$ i3 e! v
这个啥意识?  完全看不懂,能讲解下吗  ^$ a* f2 ?. P- Y- B2 a

该用户从未签到

4#
发表于 2022-12-1 17:57 | 只看该作者
ADC_Channel_10代表的是采样用的AD10通道,5 b# W5 e$ H6 e" h8 ?
条用这个函数会得到AD采样的值

点评

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

该用户从未签到

5#
 楼主| 发表于 2022-12-1 18:14 | 只看该作者
Storm_change 发表于 2022-12-1 17:57
, Q" \: R4 T* S- Z7 w4 F( aADC_Channel_10代表的是采样用的AD10通道,
5 \$ U! y- h+ K条用这个函数会得到AD采样的值
; g/ X$ E$ |6 R$ N
如何得到AD采样的值我知道,现在不清楚的是怎么把这个值给MODBUS的保持寄存器,然后用通讯的方式读出来7 S# Q$ E; |7 j# a8 ]# E6 Q

该用户从未签到

6#
发表于 2022-12-5 13:34 | 只看该作者
读取ADC转换值; ?1 M  a' \; x3 C# v
设置规则序列通道以及采样周期的库函数是:# F( Q& a' C  ?
void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t: n5 B9 y* u$ \' ^' q/ ]: F2 I% g0 I. H
ADC_Channel,uint8_t Rank, uint8_t ADC_SampleTime);. \0 _) P. \+ W1 _) ?

( f" I; z' Y3 j' G7 Q- h5 q* {ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_239Cycles5 );( I+ e; _5 m: Y1 x, O( F
# ~+ _& }% G9 h% e
设置好规则序列通道及采样周期,接下来就要开启转换,由于我们采
( H5 \& S( K# o" ^% V. _4 u: C8 `0 s, M用的是软件触发,库函数
  k2 @. C' g1 k9 vvoid ADC_SoftwareStartConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState);
4 D3 o6 T+ i' f8 j% h  t1 @/ _0 X: e! D9 L& u  t. F
开启转换之后,就可以获取ADC 转换结果数据,调用的库函数是:
& `5 J0 c  s% h' p+ H3 s8 z" `. Buint16_t ADC_GetConversionValue(ADC_TypeDef* ADCx);
! _8 f$ L# R- N
3 @  B3 \+ m: V$ Z4 O6 C获取 AD 转换的状态信息的库函数是:
7 \6 Q# o1 ^$ F4 b6 w; I- j# h# @FlagStatus ADC_GetFlagStatus(ADC_TypeDef* ADCx, uint8_t
0 k7 u0 a' W: P; K1 B! lADC_FLAG);" s; H6 P  J) R  h9 a; m
3 u% ]' ?0 e! ~6 r' @. E
例如我们要判断 ADC1 的转换是否结束,方法是:: P) J( g, r9 h) |
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换结束
/ n+ X6 Y1 p6 v/ @& ~. z4 r————————————————! @1 ?4 S4 ~1 l

2 i* l4 t6 E: n% S& C3 w7 F& t0 Z3 [' f

点评

对的,流程很全,定义一个和返回值一样的变量,等待转换完就会直接得到采样的值  详情 回复 发表于 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:346 i. e5 p& D" j+ d9 A1 r  G
    读取ADC转换值
    ' W  Z1 v' V; V% m! {9 G设置规则序列通道以及采样周期的库函数是:& t5 u7 A- @, s) Q/ f% o
    void ADC_RegularChannelConfig(ADC_TypeDef*  ...

    3 d6 g  a# [# }) C; ?8 L5 J% S对的,流程很全,定义一个和返回值一样的变量,等待转换完就会直接得到采样的值
    5 W+ {9 h6 K6 q& C2 S

    该用户从未签到

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

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-6-27 21:27 , Processed in 0.093750 second(s), 27 queries , Gzip On.

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

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

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