这两个问题一直困扰了我好久,迫不得已来发帖求助,因为周遭没有一起玩这个的人可以一起讨论,学习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[USART_RX_STA&0X3FFF]=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[t]); LCD_ShowString (0,0,a);
不知道写法有没有问题,麻大佬指点一下,在此谢过大佬,新手没人一起学习讨论,遇到问题解决起来真困难。。。。 |
|
1)USART2_IRQHandler()明明是串口2 中断服务程序,却在中断处理中接收串口1的数据[Res =USART_ReceiveData(USART1); //读取接收到的数据],乱套!
2) 中断本来就要快速处理,避免堆死,您这代码,还在里面加延时【delay_ms(100)】,还是毫秒级的?
嗷嗷,不好意思,代码可能是写糊涂了,那里应该是usart2的,那会修改了原子的代码,可能在复制前多按了一个ctrl+z,并非复制的,中断里面不能加延时之前并不知道,蜂鸣器只是为了做一个判断,之前是放在数据接收完成以后的,还有第二个问题呢,那个是为什么呢,大佬
这句,拿USART_RX_BUF[t]的char或者u8类型去匹配前面的%s ??