使用无线UART功能对EFM32ZG嵌入式系统进行编程。
UART正确接收来自无线地面站的数据。如果是这样,我只需将布尔值切换为" true"。当UART检测到RX缓冲区中的信息时,布尔值在中断服务处理程序中设置。为了测试这个功能,我指示微处理器在正确解码数据包时将LED设置为高电平,确实如此,因此我确信问题不在于接收UART数据。
从UART.h文件中我声明了我的布尔值:
`volatile bool Sweep_CW`
在UART.c文件中,我有一个将值设置为True的函数:
if(received_packet[1] == '1' && received_packet[2] == '1'){
Sweep_CW = true;
...
}
我的代码的另一部分读取此布尔值。接口文件在其头文件中包含以下内容:
extern volatile bool Sweep_CW;
在接口文件" .c"文件,我有一个函数,当它读取布尔值为true时,将LED设置为高。在UART上接收到新数据时调用此函数,否则CPU将循环等待。我相信这部分代码也可以使用,因为它经过了广泛的测试。
...
if(Sweep_CW)
GPIO_PinOutSet(gpioPortC,11);
...
问题:Sweep_CW永远不会被解释为' true'在接口文件的.c函数中。
问题:我觉得这应该是容易的,但它给了我很多的悲伤。我是否错误地设置了我的声明/我错过了一些非常明显的东西?
到目前为止我尝试过的事情:
1)我确定我正在使用" volatile"存储类说明符 - 在这种情况下非常重要。
2)我确保我的中断服务程序在完成后清除正确的标志。
3)在线评论类似主题的材料:https://electronics.stackexchange.com/questions/53218/pic-global-variable-not-modified-inside-interrupt-handler
4)小睡一会儿,用一双新鲜的眼睛回到这里。
答案 0 :(得分:0)
volatile bool Sweep_CW;
是 声明,属于头文件。
{{1}}是定义,只应在源文件中出现一次。
不幸的是,仅这一点并不能解释你的问题。你能发布一个更完整的代码示例来展示问题。很难分析甚至可能不包含相关代码的小片段。