蓝牙通讯一直进入串口接收中断

发布于 2020-10-12 20:19:30

您好,请问我在使用串口4进行蓝牙通讯的时候,目的是想要串口一接收到数据,就进入串口回调函数,但是程序会一直不断地进入串口4的接收回调函数,就算不发数据,甚至拔掉蓝牙,也还是会进入串口接收回调,请问这是什么原因啊?
程序如下:

static struct rt_semaphore rx_sem;
 #define SAMPLE_UART_NAME       "uart4"
rt_uint32_t level;
static rt_thread_t tid2 = RT_NULL;//线程2的控制块
// 接收数据回调函数 
static rt_err_t uart_input(rt_device_t dev, rt_size_t size)
{
    rt_sem_release(&rx_sem);
    return RT_EOK;
}
/* 线程2的入口函数 */
void serial_thread_entry(void *param)
{
    while (1)
    {
        /* 阻塞等待接收信号量,等到信号量后再次读取数据 */
        rt_sem_take(&rx_sem, RT_WAITING_FOREVER);

    }
}
//线程创建函数
int thread_sample(void)
{
    tid2 = rt_thread_create("serial", serial_thread_entry, RT_NULL, 512, 24, 10);

               /* 如果获得线程控制块,启动这个线程 */
               if (tid2 != RT_NULL)
               {

                   rt_thread_startup(tid2);
               }  
return 0;
}
//串口配置函数
void ckpz(void)
{
    /* 初始化信号量 */
    serial = rt_device_find(SAMPLE_UART_NAME);
                  rt_sem_init(&rx_sem, "rx_sem", 0, RT_IPC_FLAG_FIFO);
                  rt_device_open(serial, RT_DEVICE_FLAG_INT_RX);
                  rt_device_set_rx_indicate(serial, uart_input);

    }
int main()
{
       level = rt_hw_interrupt_disable();
       rt_hw_interrupt_enable(level);//打开中断
       ckpz();
       thread_sample();
}

查看更多

关注者
0
被浏览
321
1 个回答
aozima
aozima 2020-10-12
拒绝白嫖,拒绝键盘侠!
进入串口接收回调

然后收到了啥数据呢? 如果拔掉模块还有,考虑下上拉电阻。
要么芯片或驱动本身有问题

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览