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

[STM32] MODBUS通讯问题?

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 Heaven_1 于 2022-12-1 17:53 编辑
' X3 S; Z) G7 X9 e" n
/ F& W- _% Z; h+ s1 R大神们,我想把AD采样的数据Get_ADC_THR1_Value(ADC_Channel_10,20)赋值到MODBUS保持寄存器0X 0001中,该怎么操作?
  ^- _5 ^& C; B; H+ ]

该用户从未签到

2#
发表于 2022-12-1 11:18 | 只看该作者
struct s3c_ts_regs {3 l* n  M- Q6 |
unsigned long adccon;; _  Q' A( T( W5 K2 c/ ?
};, W; o& _; V; P1 }) l' ?7 q( c
static volatile struct s3c_ts_regs *s3c_ts_regs;# e. s- L6 G/ v
s3c_ts_regs = ioremap(0x58000000, sizeof(struct s3c_ts_regs));
. o% h9 x+ |, qs3c_ts_regs->adccon = (1<<14)|(49<<6);# j/ g' z2 v8 y! [" N' P
参考一下吧!

点评

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

该用户从未签到

3#
 楼主| 发表于 2022-12-1 11:58 | 只看该作者
big_gun 发表于 2022-12-1 11:18+ S% u, a9 A0 {
struct s3c_ts_regs {- L6 _0 s, N2 g" \: {, Z
unsigned long adccon;8 ]; a  e" y+ V, D8 j, ?4 ~/ y
};

7 \. h, Q! m0 s2 }- \0 v; F这个啥意识?  完全看不懂,能讲解下吗
* u. E/ A' p5 f: b8 ^8 C

该用户从未签到

4#
发表于 2022-12-1 17:57 | 只看该作者
ADC_Channel_10代表的是采样用的AD10通道,6 b: v/ z+ g* T5 f5 k
条用这个函数会得到AD采样的值

点评

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

该用户从未签到

5#
 楼主| 发表于 2022-12-1 18:14 | 只看该作者
Storm_change 发表于 2022-12-1 17:57: ~) w  k3 C; c% j4 _! F: }- x7 C
ADC_Channel_10代表的是采样用的AD10通道,
" J- c7 k6 C5 p0 q- W( y7 l条用这个函数会得到AD采样的值
1 Z: S6 E1 c& R. r: A! A2 t' h
如何得到AD采样的值我知道,现在不清楚的是怎么把这个值给MODBUS的保持寄存器,然后用通讯的方式读出来- D' p# d# l  z) L2 j0 P; R

该用户从未签到

6#
发表于 2022-12-5 13:34 | 只看该作者
读取ADC转换值6 q: i6 {/ U$ m7 _
设置规则序列通道以及采样周期的库函数是:% C; A9 f7 P/ f! _, ^- l- ]/ |
void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t
% y# V3 C: q+ J  V# RADC_Channel,uint8_t Rank, uint8_t ADC_SampleTime);1 d, t1 o& N5 Q2 @
3 _* }8 X" f$ k  }
ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_239Cycles5 );
5 J( w6 j4 Z4 }$ C  ]' |* d$ a  f( v/ W- [
设置好规则序列通道及采样周期,接下来就要开启转换,由于我们采
/ k0 w: `/ H* F8 x: l- [用的是软件触发,库函数! K4 k4 [( c# a# k) Z
void ADC_SoftwareStartConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState);) P6 S5 _$ j0 _7 t8 S/ y# T
1 r+ C# N6 D) a2 H! ?, V6 V
开启转换之后,就可以获取ADC 转换结果数据,调用的库函数是:
& J4 C8 P7 l0 S& M6 @8 I0 buint16_t ADC_GetConversionValue(ADC_TypeDef* ADCx);
4 p8 O  Z' u, e3 M) [8 E4 [5 M' C3 b6 u! H9 \+ {
获取 AD 转换的状态信息的库函数是:
0 s: x# m9 x1 G, aFlagStatus ADC_GetFlagStatus(ADC_TypeDef* ADCx, uint8_t* ~: Z1 h: n+ _$ k
ADC_FLAG);
4 R: n  Q9 ^0 {) Z$ G! l7 j3 P5 A9 S$ b2 f
例如我们要判断 ADC1 的转换是否结束,方法是:7 f: E3 ~& C1 M: C
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换结束
7 K. s. u* k2 L, m9 I' O7 ~  S————————————————1 }$ {$ \  X8 {

6 ~' G+ t! ]4 t# T( y: p& w% @# Z( V; M

点评

对的,流程很全,定义一个和返回值一样的变量,等待转换完就会直接得到采样的值  详情 回复 发表于 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:349 `4 ?/ c8 r0 O9 ~: D9 U# x
    读取ADC转换值
    2 G3 M9 Q, N4 R/ q  B8 S: Y设置规则序列通道以及采样周期的库函数是:5 `$ K% m0 Z; B" s/ C( X& |5 L
    void ADC_RegularChannelConfig(ADC_TypeDef*  ...

      t0 m0 V  Q9 x对的,流程很全,定义一个和返回值一样的变量,等待转换完就会直接得到采样的值+ |1 {/ i: q8 [- T* h: i2 K9 Q- R2 G

    该用户从未签到

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

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-6-8 23:30 , Processed in 0.078125 second(s), 27 queries , Gzip On.

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

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

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