xdaforce 发表于 2019-11-4 13:17:27

关于stm32串口的问题



这两个问题一直困扰了我好久,迫不得已来发帖求助,因为周遭没有一起玩这个的人可以一起讨论,学习stm32没多久,让各位大佬见笑了。
1、大佬们,我想去掉0x0a和0x0d的判断协议,改为这样可以吗?(里面的蜂鸣器是我用来判断程序是否跑死,手头只有isp下载器。。。)如果可以,我会卡在中断中,这是为啥呢,是因为ore吗,有没有可能是因为没有清中断造成的,还有一个问题在下面
void USART2_IRQHandler(void)                        //串口2 中断服务程序
{
u8 Res;//(这句我放在usart.c中最开始的include后面了)if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)//接收中断(接收到的数据必须是0x0d 0x0a结尾)
                {
                                        Res =USART_ReceiveData(USART2);      //读取接收到的数据
                                        USART2->DR;
                                        // beep=1;
                                        //delay_ms(100);
                                        //beep=0;
      
                                        USART_RX_BUF=Res ;
                                        USART_RX_STA++;
                                        if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收数据错误,重新开始接收
                                        USART_ClearFlag(USART2,USART_IT_RXNE);
      
               
                }
}


2、还有,我想在tft中显示串口发来的数据,百度很久,发现网上都说应该用sprintf函数,但是我在使用过程中,发现没法显示,但是我已经强制转换变量为字符串了,代码如下

char a;
sprintf(a,"%s",USART_RX_BUF);   LCD_ShowString (0,0,a);

不知道写法有没有问题,麻大佬指点一下,在此谢过大佬,新手没人一起学习讨论,遇到问题解决起来真困难。。。。

发表于 2019-11-4 14:06:13

我怀疑是你的100ms的问题导致的,接收数据溢出。

mikecai 发表于 2019-11-4 16:45:18

那里搜来的代码?
1)USART2_IRQHandler()明明是串口2 中断服务程序,却在中断处理中接收串口1的数据,乱套!
2) 中断本来就要快速处理,避免堆死,您这代码,还在里面加延时【delay_ms(100)】,还是毫秒级的?

xdaforce 发表于 2019-11-4 17:50:07

mikecai 发表于 2019-11-4 16:45
那里搜来的代码?
1)USART2_IRQHandler()明明是串口2 中断服务程序,却在中断处理中接收串口1的数据

嗷嗷,不好意思,代码可能是写糊涂了,那里应该是usart2的,那会修改了原子的代码,可能在复制前多按了一个ctrl+z,并非复制的,中断里面不能加延时之前并不知道,蜂鸣器只是为了做一个判断,之前是放在数据接收完成以后的,还有第二个问题呢,那个是为什么呢,大佬

夏雨夜寐 发表于 2020-1-9 09:31:05

sprintf(a,"%s",USART_RX_BUF);   LCD_ShowString (0,0,a);
这句,拿USART_RX_BUF的char或者u8类型去匹配前面的%s ??
页: [1]
查看完整版本: 关于stm32串口的问题