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

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-21 08:45
nashui_sx 发表于 2019-3-14 19:39
那你直接蓝牙接usb串口,串口助手看看16进制数据就知道了

终于找到问题了,有个外部中断优先级比串口中断高,把外部中断优先级调低就好了
Gwvfbukn
2楼-- · 2019-07-21 09:34
void USART1_IRQHandler(void)                        //串口1中断服务程序
{
        static u8 cnt = 0;
        u8 r;
        if(USART_GetITStatus(USART1, USART_IT_RXNE) == SET)  //接收中断
        {
                r =USART_ReceiveData(USART1);//(USART1->DR);        //读取接收到的数据
                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);
}


上面的代码显示好像有点问题
login_FAE
3楼-- · 2019-07-21 11:50
 精彩回答 2  元偷偷看……
nashui_sx
4楼-- · 2019-07-21 15:45
Gwvfbukn 发表于 2019-3-14 18:44
void USART1_IRQHandler(void)                        //串口1中断服务程序
{
        static u8 cnt = 0;

void USART1_IRQHandler(void)                        //串口1中断服务程序
{
                        static u8 cnt = 0;
                        u8 r;
                        if(USART_GetITStatus(USART1, USART_IT_RXNE) == SET)  //接收中断
                        {
                                                r =USART_ReceiveData(USART1);//(USART1->DR);        //读取接收到的数据
                                                buf[cnt++] = r;
                                                
                                                if(r == ' ')
                                                {
                                                        buf[cnt] = '';
                                                        printf("%s ",buf);
                                                        cnt = 0;
                                                }
                                                USART_ClearFlag(USART1,USART_FLAG_RXNE);
                        }      
}
Gwvfbukn
5楼-- · 2019-07-21 18:45
nashui_sx 发表于 2019-3-14 19:04
void USART1_IRQHandler(void)                        //串口1中断服务程序
{
                       ...

不能用,串口发数据完全没反应,大概会是哪里有问题呢
nashui_sx
6楼-- · 2019-07-21 20:33
 精彩回答 2  元偷偷看……

一周热门 更多>