void USART1_IRQHandler(void) //串口1中断服务程序
{
u8 Res;
#if SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS为真,则需要支持OS.
OSIntEnter();
#endif
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾)
{
Res =USART_ReceiveData(USART1); //读取接收到的数据
if((USART_RX_STA&0x8000)==0)//接收未完成
{
if(USART_RX_STA&0x4000)//接收到了0x0d
{
if(Res!=0x0a)
{
USART_RX_STA=0;//接收错误,重新开始
}
else
{
USART_RX_STA|=0x8000; //接收完成了
LCD_ShowString(60,110,200,16,16,USART_RX_BUF); //显示接收到的数据 //求助这边该如何显示,我刚试了上面函数,我在串口调试助手发了 ABC显示正常 ABCD显示正常 ABC显示不正常ABCD ABCF显示正常 ACBCBF显示正常
//总结 当下次大于等于上次个数的时候显示正常
//求助是不是显示函数调用不对?
}
}
else //还没收到0X0D
{
if(Res==0x0d)USART_RX_STA|=0x4000;
else
{
USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
USART_RX_STA++;
if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收数据错误,重新开始接收
}
}
}
}
#if SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS为真,则需要支持OS.
OSIntExit();
#endif
}
#endif
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
int main(void)
{
u16 adcx;
float temp;
u8 t;
u8 len;
u16 times=0;
delay_init(); //延时函数初始化
uart_init(9600); //串口初始化为9600
LED_Init(); //初始化与LED连接的硬件接口
LCD_Init();
Adc_Init(); //ADC初始化
//POINT_COLOR=RED;//设置字体为红 {MOD}
//LCD_ShowString(60,50,200,16,16,"Mini STM32");
//LCD_ShowString(60,70,200,16,16,"ADC TEST");
//LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK");
//LCD_ShowString(60,110,200,16,16,"2014/3/9");
//LCD_showdouble(60,110,200,16,16,2014/3/9);
//显示提示信息
POINT_COLOR=BLUE;//设置字体为蓝 {MOD}
//LCD_ShowString(60,130,200,16,16,"ADC_CH1_VAL:");
//LCD_ShowString(60,150,200,16,16,"ADC_CH1_VOL:0.000V");
while(1)
{
if(USART_RX_STA&0x8000) //如果接受到了0X0D,0X0A
{
LCD_ShowString(60,110,200,16,16,USART_RX_BUF);
//还是有这个问题,原子大大,,,
len=USART_RX_STA&0x3fff; //得到此次接收到的数据长度
//printf(" 您发送的消息为: ");
for(t=0;t<len;t++)
{
USART1->DR=USART_RX_BUF[t];
while((USART1->SR&0X40)==0); //等待发送结束
}
//printf(" "); //插入换行
USART_RX_STA=0;
for(t=0;t<200;t++)
{
USART_RX_BUF[t] = 0;
}
}
else
{
times++;
if(times%5000==0)
{
//printf(" ALIENTEK MiniSTM32开发板 串口实验 ");
//printf("正点原子@ALIENTEK ");
//printf("AT "); //测试信号
}
//if(times%200==0)printf("请输入数据,以回车键结束 ");
//if(times%400==0)printf("AT "); //测试信号
if(times%30==0)LED0=!LED0; //闪烁LED,提示系统正在运行.
delay_ms(10);
}
LCD_ShowString(60,150,200,16,16,AT_RST); //显示AT+RST
//printf("%s ",AT_RST); //串口打印AT+RST
}
}
一周热门 更多>