OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5158|回复: 1

求助使用ATK-BLE01蓝牙模块进行F407和PC间的数据传输代码问题

[复制链接]

4

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2021-7-18
在线时间
37 小时
发表于 2023-3-8 22:24:32 | 显示全部楼层 |阅读模式
10金钱
使用的STM32F407探索者开发板+两个ATKBLE-01模块,板子串口1用来接收传感器数据,串口3用来连接蓝牙模块,另一个蓝牙模块用USB转TTL与电脑端相连,想通过蓝牙来接收传感器采集的数据,接线如下图1所示(个人感觉没啥问题,主要是代码的问题),后面的分别是main.c,usart.c(串口1),usart3.c(串口3)的中断程序,大部分程序都是采用正点原子安全匹配-从设备的例程,直接接收串口1的数据是可以的,但没有办法通过蓝牙模块接收传感器数据,里面还有像ble_usart.c,ble_app.c等文件都没有动过。
(蓝牙模块接线)
main.c程序

int main(void)
{
    u8 t;
    u8 len;
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
    delay_init(168);                               //初始化延时函数
    uart_init(115200);                               //初始化串口波特率为115200
    usart3_init(115200);
    LED_Init();                                       //初始化LED
    KEY_Init();                                    //KEY初始化
    Ble_Test();                                    //ble测试
    while(1)
    {
        if(USART3_RX_STA&0x8000)
        {                       
            len=USART3_RX_STA&0x3fff;//得到此次接收到的数据长度   
            //printf("\r\nthe massenge you sent:\r\n");
            for(t=0;t<len;t++)
            {
                USART_SendData(USART3, USART3_RX_BUF[t]);         //向串口3发送数据
                while(USART_GetFlagStatus(USART3,USART_FLAG_TC)!=SET);//等待发送结束
            }
            if(t==USART_REC_LEN) t=0;
            printf("\r\n\r\n");//插入换行
            USART3_RX_STA=0;
        }
    }
}

usart.c中断程序
void USART1_IRQHandler(void)                    //串口1中断服务程序
{
    u8 USART1_Res,t,len;
#ifdef OS_TICKS_PER_SEC         //如果时钟节拍数定义了,说明要使用ucosII了.
    OSIntEnter();   
#endif
    if(USART_GetITStatus(USART1, USART_IT_RXNE)!=RESET)  //接收中断(接收到的数据必须是0x0d 0x0a结尾)
    {
        USART1_Res =USART_ReceiveData(USART1);//(USART1->DR);    //读取接收到的数据
        if((USART_RX_STA&0x8000)==0)//接收未完成
        {
            if(USART_RX_STA&0x4000)//接收到了0x0d
            {
                if(USART1_Res!=0x0a)
                {
                    USART_RX_STA=0;//接收错误,重新开始
                }
                else USART_RX_STA|=0x8000;    //接收完成了
//                len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度   
//                //printf("\r\nthe massenge you sent:\r\n");
//                for(t=0;t<len;t++)
//               {
//                USART_SendData(USART3, USART_RX_BUF[t]);         //向串口3发送数据
//                printf("\r\n\r\n");
//                while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
//               }
            }
            else //还没收到0X0D
            {   
                if(USART1_Res==0x0d)USART_RX_STA|=0x4000;
                else
                {
                    USART_RX_BUF[USART_RX_STA&0X3FFF]=USART1_Res ;
                    USART_RX_STA++;
                    if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收数据错误,重新开始接收      
                }         
            }
        }            
  }
}


usart3.c中断程序
void USART3_IRQHandler(void)
{
    u8 res;

    if (USART_GetITStatus(USART3, USART_IT_RXNE) != RESET) //接收到数据
    {

        res = USART_ReceiveData(USART3);

        if ((USART3_RX_STA & (1 << 15)) == 0)           //接收完的一批数据,还没有被处理,则不再接收其他数据
        {
            if (USART3_RX_STA < USART3_MAX_RECV_LEN)        //还可以接收数据
            {
                    TIM_SetCounter(TIM7, 0);                //计数器清空

                    if (USART3_RX_STA == 0)
                    {
                        TIM_Cmd(TIM7, ENABLE);              //使能定时器7
                    }

                USART3_RX_BUF[USART3_RX_STA++] = res;        //记录接收到的值
            }
            else
            {
                USART3_RX_STA |= 1 << 15;                    //强制标记接收完成
            }
        }
    }
}


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2021-7-18
在线时间
37 小时
 楼主| 发表于 2023-3-8 22:25:39 | 显示全部楼层
好吧,接线图没有显示出来,就是按照蓝牙模块的文档接的线,不会有啥问题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 14:12

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表