STM8 UART1只能接收到5个数据中的最后一个
设置代码:void UART1_InitCon()
{
UART1_DeInit();
UART1_Init((u32)9600,
UART1_WORDLENGTH_8D,
UART1_STOPBITS_1,
UART1_PARITY_NO,
UART1_SYNCMODE_CLOCK_DISABLE,
UART1_MODE_RX_ENABLE);
UART1_Cmd(ENABLE);
UART1_ITConfig(UART1_IT_RXNE_OR, ENABLE);
}
中断接收数据的代码:
INTERRUPT_HANDLER(UART1_RX_IRQHandler, 18)
{
ColorData = UART1_ReceiveData8();
RData = UART1_ReceiveData8();
GData = UART1_ReceiveData8();
BData = UART1_ReceiveData8();
ModeData = UART1_ReceiveData8();
return;
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
}
现在是我上位机发了5个数据入0x01 0x00 0x00 0x00 0x01
然后我Debug模式下看到的变量 ColorData、RData 、GData 、BData 、ModeData数据全部都是0x01
如果发送的是 0x01 0x00 0x00 0x00 0x02,则变量 ColorData、RData 、GData 、BData 、ModeData数据全部都是0x02
小弟初出茅庐,还请大神指教
这样写接收到的数据肯定是一样的,上位机发送5个数据,串口就会进中断5次,每次接收到一个数据就会将接收到的数据赋给这5个变量,所以变量的值都是一样的。在中断里面用数组接收,每进一次中断,数组下标加1,这样才能看到接收到的所有数据。 本帖最后由 wenyangzeng 于 2018-1-24 17:10 编辑
官方例程可参考,接收数据在缓冲 aRxBuffer中:
INTERRUPT_HANDLER(UART2_RX_IRQHandler, 21)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
if(UART2_GetFlagStatus(UART2_FLAG_RXNE))
{
aRxBuffer = UART2_ReceiveData8();
}
else
if(UART2_GetFlagStatus(UART2_FLAG_IDLE))
{
Clear = UART2->SR;
Clear = UART2->DR;
ReceiveState=1;
}
}
usart每次中断读入1个字节数据,楼主在一次中断中赋值那么多组数据当然出错了。ST官方代码用数组指针xCounter++是很巧妙的思路。
______________________________________________
中断接收数据的代码:
INTERRUPT_HANDLER(UART1_RX_IRQHandler, 18)
{
ColorData = UART1_ReceiveData8();
RData = UART1_ReceiveData8();
GData = UART1_ReceiveData8();
BData = UART1_ReceiveData8();
ModeData = UART1_ReceiveData8();
return;
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
}
_______________________________________________
你这程序不对呀,一次中断,只能接收一个数据,接收完必须中断返回的。
请参考楼上的答案,串口带FIFO的结构就是楼上的程序,大家都是这么用的。
hxydj 发表于 2018-1-24 17:00
这样写接收到的数据肯定是一样的,上位机发送5个数据,串口就会进中断5次,每次接收到一个数据就会将接收到 ...
非常感谢! wenyangzeng 发表于 2018-1-24 17:03
官方例程可参考,接收数据在缓冲 aRxBuffer中:
非常感谢! toofree 发表于 2018-1-24 17:10
______________________________________________
中断接收数据的代码:
INTERRUPT_HANDLER(UART1_RX_IRQHa ...
非常感谢!
页:
[1]