打印
[其他ST产品]

STM32 中断的全局变量

[复制链接]
825|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
elephant00|  楼主 | 2025-2-17 16:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在 ccit.h中 定义全局 数组  volatile uint8_t global[50];

it.c中引用了   #include''ccit.h"
然后再main.c中用extern uint8_t  global[50];

这个数组是接收串口2的数据
在串口2第一次接收到PC数据为  01 02 03    //OK
然后我改变PC机下发的数据 改为 ff ff  //但是这个全局数组里面接收的还是01 02 03
为什么?
为什么再次改变之后就没变化了

使用特权

评论回复
沙发
两只袜子| | 2025-2-17 19:00 | 只看该作者
中断处理是否正确

使用特权

评论回复
板凳
jcky001| | 2025-2-17 19:26 | 只看该作者
如果使用的是轮询或中断方式来接收数据,检查接收逻辑是否完整,包括错误处理和缓冲区溢出处理。

使用特权

评论回复
地板
cr315| | 2025-2-17 21:00 | 只看该作者
检查串口配置是否有误

使用特权

评论回复
5
公羊子丹| | 2025-3-13 08:20 | 只看该作者
可能是 global 数组的读取操作存在问题,确认在串口中断函数中,每次接收到数据时都正确地更新了数组,而不是覆盖之前的数据。

使用特权

评论回复
6
周半梅| | 2025-3-13 08:22 | 只看该作者
检查 volatile 是否正确使用,它告诉编译器该变量可能在中断服务程序中被修改,从而避免优化。没有 volatile 会导致数据读取异常。

使用特权

评论回复
7
帛灿灿| | 2025-3-13 08:23 | 只看该作者
你确定串口中断函数确实被触发了吗?可能是串口中断没有正确响应新数据,所以数组没有更新。

使用特权

评论回复
8
童雨竹| | 2025-3-13 08:25 | 只看该作者
检查你是否在 main 函数中或者其他地方有多次对 global 数组的重置或清空操作,可能导致新数据覆盖了旧数据。

使用特权

评论回复
9
万图| | 2025-3-13 08:26 | 只看该作者
ff ff 数据可能没有被正确写入数组,可以通过在中断服务函数中打印调试信息,确保数据是正确接收并存入数组的。

使用特权

评论回复
10
Wordsworth| | 2025-3-13 08:27 | 只看该作者
你使用的是 HAL_UART_Receive_IT 还是 HAL_UART_Receive?中断接收模式需要确保数据接收完后正确清除标志位,否则会导致接收卡住。

使用特权

评论回复
11
Bblythe| | 2025-3-13 08:29 | 只看该作者
在改变 PC 数据之前,确认 USART2 相关的设置没有被修改,特别是波特率、数据位等设置不一致,可能会导致数据读取异常。

使用特权

评论回复
12
Pulitzer| | 2025-3-13 08:30 | 只看该作者
确保数组接收数据时没有溢出,global[50] 数组大小为50,数据写入超过数组的末尾会导致覆盖。

使用特权

评论回复
13
Uriah| | 2025-3-13 08:32 | 只看该作者
如果串口缓存区满了,新的数据包可能无法被接收。可以在接收中断里检查缓存区是否满并根据需要进行清空或处理。

使用特权

评论回复
14
Clyde011| | 2025-3-13 08:33 | 只看该作者
你可以加一些保护措施,比如在中断函数内确保每次接收的数据被正确传输到 global 数组内并且不会被遗漏。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1018

主题

3472

帖子

7

粉丝