任务更新:
1. 屏与单片机的数据读取接收问题;
2. 动态曲线坐标轴的绘制;
3. 批量烧录问题(长远问题);
上午
串口返回值接受不到,只能接收到一个帧头;
为什么单片机和屏不通呢;
代码没有问题,但用单片机发送数据给屏的话并不显示;
用另一个搭载STM32芯片的电路板却可以实现通讯;
莫非是芯片的问题;
所用的串口驱动是不同的;
神奇的事情;
直接试了一下仿真,结果代码跑了,屏幕上也显示了;
那为什么直接将程序拷进去时它不跑呢;
就离谱;
网上说是因为没有勾选下载后运行,所以要按复位Reset;
下午
调试数据接收;
改动中断函数为:
u16 back[6]; //预设为6个字;
int i;
void USART1_IRQHandler(void) //串口1中断服务程序
{
#if SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS为真,则需要支持OS.
OSIntEnter();
#endif
for(i = 0; i < 6; i++) {
while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE)) {
back[i] = USART_ReceiveData(USART1);
}
}
}
但是没有数据返回;
想要测试一下寄存器状态改变的次数,加个state,初置为0;
改语句为:
u16 back[6]; //预设为6个字;
int i;
int state;
void USART1_IRQHandler(void) //串口1中断服务程序
{
#if SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS为真,则需要支持OS.
OSIntEnter();
#endif
state = 0;
for(i = 0; i < 6; i++) {
while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE)) {
state++;
back[i] = USART_ReceiveData(USART1);
}
}
}
仿真state为1;
说明可能数据只寄了一次,但没收完全;
查找资料,其实是每发送一个字节数据产生一次中断,而不是在一个中断里读所有字节;
这也就是为什么state总为1;
问题解决;
明天贴自己的代码;