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

[STM32] MODBUS通讯问题?

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 Heaven_1 于 2022-12-1 17:53 编辑
  }4 c: |+ D8 |5 _. h2 ?( S% k  J3 _
大神们,我想把AD采样的数据Get_ADC_THR1_Value(ADC_Channel_10,20)赋值到MODBUS保持寄存器0X 0001中,该怎么操作?
4 H) ]5 t* C, H% |3 o1 E9 z

该用户从未签到

2#
发表于 2022-12-1 11:18 | 只看该作者
struct s3c_ts_regs {
8 z$ @5 Y  U0 f  c7 funsigned long adccon;. L' T" U' F/ O( k! l6 Y- S0 x
};2 x! G2 H9 P0 Q: t' H4 t
static volatile struct s3c_ts_regs *s3c_ts_regs;1 o8 |; }4 h6 F; G
s3c_ts_regs = ioremap(0x58000000, sizeof(struct s3c_ts_regs));
' \$ x+ k' U" Rs3c_ts_regs->adccon = (1<<14)|(49<<6);$ k6 U6 n; ?+ J  o
参考一下吧!

点评

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

该用户从未签到

3#
 楼主| 发表于 2022-12-1 11:58 | 只看该作者
big_gun 发表于 2022-12-1 11:18& L( |9 f1 w  h+ b
struct s3c_ts_regs {, n. r4 t6 K9 O3 Q# o
unsigned long adccon;1 q3 D$ ~, G" f3 h$ a5 h
};

, ~& N8 U4 p: R9 n; K5 [这个啥意识?  完全看不懂,能讲解下吗8 [& U1 z& f$ c! a9 A. E% v

该用户从未签到

4#
发表于 2022-12-1 17:57 | 只看该作者
ADC_Channel_10代表的是采样用的AD10通道,0 \8 F; m9 p1 ]/ C+ G! M; k, O
条用这个函数会得到AD采样的值

点评

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

该用户从未签到

5#
 楼主| 发表于 2022-12-1 18:14 | 只看该作者
Storm_change 发表于 2022-12-1 17:57
9 r0 t. K. B0 s8 nADC_Channel_10代表的是采样用的AD10通道,
8 ]( v) W' M! j; @8 g0 P: y条用这个函数会得到AD采样的值

6 ~4 J* H2 C% j& Z" _& }' l2 r如何得到AD采样的值我知道,现在不清楚的是怎么把这个值给MODBUS的保持寄存器,然后用通讯的方式读出来
5 G9 c& ?# L8 {% h5 `

该用户从未签到

6#
发表于 2022-12-5 13:34 | 只看该作者
读取ADC转换值. P8 z0 A. F( q1 j  M4 H
设置规则序列通道以及采样周期的库函数是:
. m' g: \: F8 d% Mvoid ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t* i2 [+ m4 H9 |8 u0 d4 o# f$ R' }9 y
ADC_Channel,uint8_t Rank, uint8_t ADC_SampleTime);% w: L) d) |- m, z9 c, v
7 K) q; o) v- D6 f% J% s/ z- `
ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_239Cycles5 );- [- G" i# y6 d8 A6 J* ]& Q

) [' v: I" I" N" ~设置好规则序列通道及采样周期,接下来就要开启转换,由于我们采8 ]) \+ s$ q% {+ B2 t, T/ C1 X+ t
用的是软件触发,库函数% o! r- d( T  c. C; S
void ADC_SoftwareStartConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState);
: z5 g& p! P/ N8 I
. V" G% y, d. G/ P- U开启转换之后,就可以获取ADC 转换结果数据,调用的库函数是:
& O9 Z( j+ S8 W6 T2 z8 y. ruint16_t ADC_GetConversionValue(ADC_TypeDef* ADCx);& i$ c# @# g1 v: T9 C6 J2 W$ L

: F' x% C1 b0 t7 W* d% c2 ?4 t" @获取 AD 转换的状态信息的库函数是:7 t9 W' Q; [5 ]2 U8 _0 d
FlagStatus ADC_GetFlagStatus(ADC_TypeDef* ADCx, uint8_t! ^! a2 T4 Y+ ?
ADC_FLAG);
6 }% T9 @' l% `8 c
1 T$ b. r0 V7 ^. D. {( I例如我们要判断 ADC1 的转换是否结束,方法是:
0 B' ~" \: a7 vwhile(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换结束
! R) O, Z$ Q! S% t$ P9 T+ i5 Y————————————————' S% I/ ?' V, r

& A6 V4 R3 O& o) J
# I2 o& t" [3 n4 [4 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:34
    " M, u" T% E: h1 |3 r- i读取ADC转换值
    : _3 r2 e3 K% F7 X8 E, `' I设置规则序列通道以及采样周期的库函数是:
      A* w0 R% L6 |' P. m- tvoid ADC_RegularChannelConfig(ADC_TypeDef*  ...

    % Q, l; f" M+ g: W' c4 i对的,流程很全,定义一个和返回值一样的变量,等待转换完就会直接得到采样的值- w6 J( s1 F8 }7 f: Z

    该用户从未签到

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

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-9-10 17:45 , Processed in 0.140625 second(s), 32 queries , Gzip On.

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

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

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