stm32+freertos。
这里我要说的是发生这种情况的另一种解决办法。
先说背景。
本来是要实现一个简单的功能,就是从串口接收数据通过队列发送给其中一个任务进行处理。
最先的问题是由于stm32的串口没有fifo,按照网上的资料实现了dma加空闲中断,这个问题就出现在空闲中断上。
反映出来的现象就是出现中断后程序没反映了,但是打断点调试又能正常运行了(只要在中断中停一下就可以)。
最后找到的问题是中断标志位没清掉,准确的说是清除方式不对。
用如下方法不对:
USART_ClearITPendingBit(USART1,USART_IT_IDLE);
正确的应该是如下用一个变量来读取两个寄存器(顺序不能反):
i=UartPort->SR;
i=UartPort->DR;
仔细看了手册才发现这个问题的。
接下来就是一个坑爹的问题了,上面的问题解决后,我觉得应该就没什么大问题了吧。于是就使用API
xQueueSendFromISR
发送数据到其中一个任务当中,但是,只要发送数据,程序就不跑了,调试时让其停下来,发现一直在空闲任务中转。
于是又到网上搜刮,看到最多的说法是中断优先级的问题,但是出现的现象却不一样,不管了,先改一下再看,很不幸,
试了好多方式都不行。。。。
就这样两天过去了,依旧没解决问题,最后走了一个贱招,在官网重新下载了一个新版本的系统再试,这一试让我泪流满面
呀,一切都正常了,这就是此问题坑爹的原因。
最后提醒一下,有问题的那个版本是8.0.0的,使用者千万要注意。