我同意大家的看法。昨晚回家里试,只是使能接收中断,无错误中断。中断函数里面只判断接收中断。无再发现漏接。 早上回公司重做昨晚的操作,无数据丢失。贴上修改后的代码。
已经调试了两天,一开始就是接收数据到数组,发现不能成功,然后试各种方法。甚至数组不输出,直接ST-LINK里面直接观察数组也尝试。如今真是无语。可能是太疲惫了,以致犯些小错误吧。谢谢各位的支持,楼上各位。
void usart_init(void)
{
//set tx as output
GPIO_Init(GPIOC,GPIO_Pin_3,GPIO_Mode_Out_PP_High_Fast);
//set rx as input.
GPIO_Init(GPIOC,GPIO_Pin_2,GPIO_Mode_In_PU_No_IT);
USART_DeInit(USART1);
USART_Init(USART1, 9600, USART_WordLength_8b, USART_StopBits_1,\
USART_Parity_No,USART_Mode_Rx|USART_Mode_Tx);
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
//USART_ITConfig(USART1, USART_IT_ERR, ENABLE);
USART_Cmd(USART1, ENABLE);
enableInterrupts();
printf("Hello world!");
}
INTERRUPT_HANDLER(USART1_RX_IRQHandler,28)
{
usart_receive_strings();
}
void usart_receive_strings(void)
{
unsigned char usart_data=0;
if(USART_GetITStatus(USART1, USART_IT_RXNE))
{
usart_data=USART_ReceiveData8(USART1);
if(usart_receive_num<30)
usart_receive_buf[usart_receive_num++]=usart_data;
}
}
|