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

[STM32] MODBUS通讯问题?

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 Heaven_1 于 2022-12-1 17:53 编辑
$ {5 m0 L. \6 H- v; H% ?* N1 |
# ]4 k/ X9 }& {/ k% s+ G$ J5 f/ W  x大神们,我想把AD采样的数据Get_ADC_THR1_Value(ADC_Channel_10,20)赋值到MODBUS保持寄存器0X 0001中,该怎么操作?
5 Y% ~, G: ?2 C

该用户从未签到

2#
发表于 2022-12-1 11:18 | 只看该作者
struct s3c_ts_regs {
+ T, I" A2 _  t' i/ d9 a% q) _% K* `& Munsigned long adccon;
4 G) E, A+ j% S: g! v7 f$ \9 C1 ?# y};4 m/ @# g" A( F1 U- r. m* g
static volatile struct s3c_ts_regs *s3c_ts_regs;
- b  Y% @) s3 F; J- m& m7 m% W" ns3c_ts_regs = ioremap(0x58000000, sizeof(struct s3c_ts_regs));
4 r' `  K7 F; J+ V0 bs3c_ts_regs->adccon = (1<<14)|(49<<6);
& a  q: a; x0 G3 [2 e参考一下吧!

点评

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

该用户从未签到

3#
 楼主| 发表于 2022-12-1 11:58 | 只看该作者
big_gun 发表于 2022-12-1 11:18* Y/ s7 j7 c8 J  p+ j& F3 y
struct s3c_ts_regs {" c0 s5 t2 |/ u3 Z
unsigned long adccon;( }+ g4 B% D' T6 s6 j% L+ o( w% U
};
! q/ u5 M1 F0 Y9 D/ `
这个啥意识?  完全看不懂,能讲解下吗2 n+ [8 v' W" ?, d/ u; B

该用户从未签到

4#
发表于 2022-12-1 17:57 | 只看该作者
ADC_Channel_10代表的是采样用的AD10通道,
- g0 E/ q4 A2 Q- P" {+ F条用这个函数会得到AD采样的值

点评

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

该用户从未签到

5#
 楼主| 发表于 2022-12-1 18:14 | 只看该作者
Storm_change 发表于 2022-12-1 17:57: n- _; X) b/ Y, s1 Y# |8 T' O
ADC_Channel_10代表的是采样用的AD10通道,
' X- G- P% y0 a* D6 f/ P* o条用这个函数会得到AD采样的值

/ H% C4 k6 ^$ u; E4 g如何得到AD采样的值我知道,现在不清楚的是怎么把这个值给MODBUS的保持寄存器,然后用通讯的方式读出来1 p$ A0 w- J$ {6 e! I

该用户从未签到

6#
发表于 2022-12-5 13:34 | 只看该作者
读取ADC转换值6 v, k7 P  c( m
设置规则序列通道以及采样周期的库函数是:. E5 @; z; r$ O$ |4 i( ~0 c
void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t
4 i6 U+ D; R8 M2 r; y% r! S( \ADC_Channel,uint8_t Rank, uint8_t ADC_SampleTime);
  }: w' k4 W! D9 d
- Z6 |# D* \/ p' P$ wADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_239Cycles5 );
% H$ j& p2 p, ?" V, K" o/ J6 y% X8 Q( S* D
设置好规则序列通道及采样周期,接下来就要开启转换,由于我们采3 C7 Q( _- @8 j
用的是软件触发,库函数! h9 K# \6 G, j
void ADC_SoftwareStartConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState);
  B, R* Z' W0 z, u6 Z6 ]
" U3 Y, q, W' c' P; b* G$ S/ y  H0 c开启转换之后,就可以获取ADC 转换结果数据,调用的库函数是:
4 E# A$ i$ x  h4 M  Iuint16_t ADC_GetConversionValue(ADC_TypeDef* ADCx);
8 |1 V1 O4 L5 e* ^* L2 ?
. w, y! t- `1 N' v! X, b获取 AD 转换的状态信息的库函数是:8 ^' k* I! U/ M* F+ I
FlagStatus ADC_GetFlagStatus(ADC_TypeDef* ADCx, uint8_t
  X: l3 D) T. h. B+ R& {- HADC_FLAG);
% q" s8 {1 r& N+ X
' [8 z6 m' d. t例如我们要判断 ADC1 的转换是否结束,方法是:1 ?, U: B, a: a8 y
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换结束% V. H! G! T( v  l% S& \) n! T
————————————————
$ w( b: S; ?8 s
: Y# |" ?$ f& Q! i+ G5 t; j: A6 S5 C' ^- G% `- z; I  n: Y

点评

对的,流程很全,定义一个和返回值一样的变量,等待转换完就会直接得到采样的值  详情 回复 发表于 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
    - p" Z# R/ F. F# B! s% j+ u读取ADC转换值& r/ s5 z$ N$ n5 g: Q7 s
    设置规则序列通道以及采样周期的库函数是:
    ; T- w8 ?! u5 w7 ~3 B  l3 f$ l* Gvoid ADC_RegularChannelConfig(ADC_TypeDef*  ...
    / _3 Z; Z' j9 m* z# R! x- A
    对的,流程很全,定义一个和返回值一样的变量,等待转换完就会直接得到采样的值
    " k% V  T' ^' @

    该用户从未签到

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

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-8-19 13:53 , Processed in 0.125000 second(s), 27 queries , Gzip On.

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

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

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