中级会员
- 积分
- 417
- 金钱
- 417
- 注册时间
- 2018-2-9
- 在线时间
- 117 小时
|
10金钱
本帖最后由 ccciron 于 2023-1-28 23:42 编辑
最近几经周折终于移植了freemodbus1.6到32项目中,虽然成功了,但是仍有一点疑惑,希望有大佬提供一点见解!移植过程中参考了八度大神的帖子,大家可以对照看一下
第一个问题:这里的发送完成标志位为什么用USART_IT_TC就好使,用USART_IT_TXE就不好使,即使在mbrtu.c中加上大佬提到的一段代码,用USART_IT_TXE 还是不行。
- vMBPortSerialEnable( BOOL xRxEnable, BOOL xTxEnable )
- {
- /* If xRXEnable enable serial receive interrupts. If xTxENable enable
- * transmitter empty interrupts.
- */
-
- if (xRxEnable) //接收使能
- {
- USART_ITConfig(USART2, USART_IT_RXNE, ENABLE); //使能接收中断
- GPIO_ResetBits(GPIOG, GPIO_Pin_8); //接收
- }
- else //失能
- {
- USART_ITConfig(USART2, USART_IT_RXNE, DISABLE); //失能接收中断
- GPIO_SetBits(GPIOG, GPIO_Pin_8); //恢复发送
- }
-
- if (xTxEnable) //发送使能
- {
- <font color="#4169e1"> USART_ITConfig(USART2, USART_IT_TC, ENABLE); //使能</font>
- GPIO_SetBits(GPIOG, GPIO_Pin_8); //发送
- }
- else //失能
- {
- <font color="#4169e1"> USART_ITConfig(USART2, USART_IT_TC, DISABLE); //失能</font>
- GPIO_ResetBits(GPIOG, GPIO_Pin_8); //设置接收
- }
- }
复制代码 第二个问题:就是八度大佬提到的这个问题有关
以输入寄存器为例,
我起始地址设为0001,不屏蔽usRegAddress++;这一句,寄存器内容如下
modbuspoll参数和读取结果如下
如果起始地址设为0000,读取结果如下
,这我就有点迷了,起始地址为0,读取结果第0位却是数组的第一位,起始地址为1,读取结果第0位却是数组的第0位,有无大佬解答一下这是为什么
|
-
|