OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6258|回复: 4

关于freemodbus移植中遇到的一点疑惑

[复制链接]

30

主题

149

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
417
金钱
417
注册时间
2018-2-9
在线时间
117 小时
发表于 2023-1-27 00:45:00 | 显示全部楼层 |阅读模式
10金钱
本帖最后由 ccciron 于 2023-1-28 23:42 编辑

最近几经周折终于移植了freemodbus1.6到32项目中,虽然成功了,但是仍有一点疑惑,希望有大佬提供一点见解!移植过程中参考了八度大神的帖子,大家可以对照看一下
第一个问题:这里的发送完成标志位为什么用USART_IT_TC就好使,用USART_IT_TXE就不好使,即使在mbrtu.c中加上大佬提到的一段代码,用USART_IT_TXE 还是不行。
  1. vMBPortSerialEnable( BOOL xRxEnable, BOOL xTxEnable )
  2. {
  3.     /* If xRXEnable enable serial receive interrupts. If xTxENable enable
  4.      * transmitter empty interrupts.
  5.      */
  6.         
  7.         if (xRxEnable)  //接收使能
  8.         {
  9.                 USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);  //使能接收中断
  10.                 GPIO_ResetBits(GPIOG, GPIO_Pin_8);  //接收
  11.         }
  12.         else  //失能
  13.         {
  14.                 USART_ITConfig(USART2, USART_IT_RXNE, DISABLE);  //失能接收中断
  15.                 GPIO_SetBits(GPIOG, GPIO_Pin_8);  //恢复发送
  16.         }
  17.         
  18.         if (xTxEnable)  //发送使能
  19.         {
  20. <font color="#4169e1">                USART_ITConfig(USART2, USART_IT_TC, ENABLE);  //使能</font>
  21.                 GPIO_SetBits(GPIOG, GPIO_Pin_8);  //发送
  22.         }
  23.         else  //失能
  24.         {
  25. <font color="#4169e1">                USART_ITConfig(USART2, USART_IT_TC, DISABLE);  //失能</font>
  26.                 GPIO_ResetBits(GPIOG, GPIO_Pin_8);  //设置接收
  27.         }
  28. }
复制代码
第二个问题:就是八度大佬提到的这个问题有关
屏幕截图_20230128_212821.png 以输入寄存器为例, 屏幕截图_20230128_213214.png 我起始地址设为0001,不屏蔽usRegAddress++;这一句,寄存器内容如下 屏幕截图_20230128_213604.png

modbuspoll参数和读取结果如下 屏幕截图_20230128_233656.png 如果起始地址设为0000,读取结果如下 屏幕截图_20230128_233850.png ,这我就有点迷了,起始地址为0,读取结果第0位却是数组的第一位,起始地址为1,读取结果第0位却是数组的第0位,有无大佬解答一下这是为什么

屏幕截图_20230128_233447.png
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

32

主题

883

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3990
金钱
3990
注册时间
2015-11-14
在线时间
541 小时
发表于 2023-1-28 16:26:11 | 显示全部楼层
TXE不是寄存器空标志吗, RS485要发送完成了才能进入接收模式, 否则最后一字节发送不出去
回复

使用道具 举报

30

主题

149

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
417
金钱
417
注册时间
2018-2-9
在线时间
117 小时
 楼主| 发表于 2023-1-28 17:14:00 | 显示全部楼层
Electronic 发表于 2023-1-28 16:26
TXE不是寄存器空标志吗, RS485要发送完成了才能进入接收模式, 否则最后一字节发送不出去

我用TXE的时候,就只能返回一个字节,然后程序就卡住了
回复

使用道具 举报

32

主题

883

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3990
金钱
3990
注册时间
2015-11-14
在线时间
541 小时
发表于 2023-2-1 09:04:31 | 显示全部楼层
看错了,我以为你是判断标志. 打开中断就只有TC中断,没有TXE中断.
回复

使用道具 举报

2

主题

474

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6084
金钱
6084
注册时间
2018-6-27
在线时间
524 小时
发表于 2023-2-13 11:13:13 | 显示全部楼层
学习学习,学习学习。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 16:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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