小白求助!串口怎么接收字符串?

2019-07-21 04:22发布

我用的蓝牙模块,想接收串口助手发送给蓝牙的字符串,
假如串口助手发送"stm32"的话会进入几次中断?

下面是我的串口中断函数

u8 buf[50];

[mw_shl_code=c,true]

void USART1_IRQHandler(void)                        //串口1中断服务程序
{
        static u8 cnt = 0;
        u8 r;
        if(USART_GetITStatus(USART1, USART_IT_RXNE) == SET)  //接收中断
        {
                r =USART_ReceiveData(USART1);//读取接收到的数据
                buf[cnt++] = r;
                buf[cnt] = '';
                printf("%s",buf);
                if(r == ' ')
                cnt = 0;
//                while(USART_GetFlagStatus(USART1,USART_FLAG_TC) != SET);
        }
        USART_ClearFlag(USART1,USART_FLAG_RXNE);
}        
[/mw_shl_code]

发送"stm32"第一次返回了ssmsm2,第二次发送"stm32"返回了sm2s

之后就再发就没反应了。。
不明白怎么回事

接收字符串
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
Gwvfbukn
1楼-- · 2019-07-22 00:27
nashui_sx 发表于 2019-3-14 19:04
void USART1_IRQHandler(void)                        //串口1中断服务程序
{
                       ...

感觉是蓝牙有问题,               
r =USART_ReceiveData(USART1);//(USART1->DR);        //读取接收到的数据
                USART_SendData(USART1,r);
Gwvfbukn
2楼-- · 2019-07-22 02:59
nashui_sx 发表于 2019-3-14 19:04
void USART1_IRQHandler(void)                        //串口1中断服务程序
{
                       ...

这么改都不行
nashui_sx
3楼-- · 2019-07-22 06:34
Gwvfbukn 发表于 2019-3-14 19:37
这么改都不行

那你直接蓝牙接usb串口,串口助手看看16进制数据就知道了
nashui_sx
4楼-- · 2019-07-22 10:33
Gwvfbukn 发表于 2019-3-14 21:54
终于找到问题了,有个外部中断优先级比串口中断高,把外部中断优先级调低就好了

那你外部中断函数也运行太长了吧
szczyb1314
5楼-- · 2019-07-22 16:15
 精彩回答 2  元偷偷看……
Gwvfbukn
6楼-- · 2019-07-22 18:41
szczyb1314 发表于 2019-3-15 08:26
外部中断肯定是延时消抖了

里面没又用延时,可能中断频率太高了?10ms进一次,感觉不高啊。。

一周热门 更多>