完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
从网上下载了个STM32的modbus.c文件,有些地方看不懂,来论坛求救.
供用户调用的有三个函数: 1.void ModInit(u8 Id); //modbus初始化 2.void ModRcv(void); //modbus信息接收,放在串口接收中断 3.void ModSend(void); //modbus信息接收,放在串口接收中断 函数1和2很好理解.3就不明白了,我估计后面的注释写错了,这算是个串口发送函数,不应该放在串口中断里. 完整函数如下:
一开始我以为是将函数3放在串口发送中断里,但疑惑的是,没有触发发送中断的条件. 后来bing搜索了下,貌似USART_ITConfig(USART1, USART_IT_TC, DISABLE);这个函数,使能发送中断后,会发送个空白帧?从而引发第一次串口发送中断. 所以说,这个函数应该作为个串口发送函数放在modbus处理程序里而不是放在串口中断里? 是不是这样呢? |
|
相关推荐
1个回答
|
|
要触发串口发送中断,您需要按照以下步骤操作:
1. 首先,确保您已经正确初始化了串口。在STM32中,这通常涉及到配置GPIO引脚、时钟、串口波特率等。您可以在STM32CubeMX工具中进行这些配置,然后生成初始化代码。 2. 在您的主函数中,调用`ModInit(u8 Id);`函数来初始化Modbus。这个函数通常会配置串口的接收和发送中断,以及初始化Modbus相关的变量。 ```c int main(void) { // 其他初始化代码... // 初始化Modbus ModInit(1); // 其他代码... } ``` 3. 在`Modbus.c`文件中,找到`ModRcv(void)`函数。这个函数应该包含了串口接收中断的处理逻辑。确保在接收到数据时,会调用`ModSend(void)`函数来发送数据。 ```c void ModRcv(void) { // 接收数据的处理逻辑... // 调用ModSend函数来发送数据 ModSend(); } ``` 4. 在STM32的中断向量表中,找到串口接收中断的入口。这通常是`USARTx_IRQHandler`,其中`x`是您使用的串口号(如USART1、USART2等)。 5. 在您的代码中,实现串口接收中断处理函数。在这个函数中,调用`HAL_UART_Receive_IT()`函数来启动串口接收中断。 ```c void USARTx_IRQHandler(void) { // 检查是否是接收中断 if (HAL_UART_Receive_IT(&huart1, &rxBuffer, 1) == HAL_OK) { // 接收到数据后,调用ModRcv函数 ModRcv(); } } ``` 6. 确保在初始化串口时,已经开启了接收中断。这通常是在`ModInit(u8 Id);`函数中完成的。 ```c void ModInit(u8 Id) { // 其他初始化代码... // 开启串口接收中断 HAL_UART_Receive_IT(&huart1, &rxBuffer, 1); } ``` 通过以上步骤,当串口接收到数据时,会触发接收中断,然后调用`ModRcv(void)`函数。在`ModRcv(void)`函数中,又会调用`ModSend(void)`函数来发送数据。这样就实现了通过串口接收中断来触发发送中断的功能。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1810 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1631 浏览 1 评论
1098 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
737 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1687 浏览 2 评论
1945浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
749浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
584浏览 3评论
604浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
567浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-29 09:21 , Processed in 0.859858 second(s), Total 81, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号