本帖最后由 jinglixixi_457498010 于 2024-1-7 21:47 编辑

使用MM32F5333所配备的串行通讯功能可实现数据的收发,其测试结果如图1所示。
image.png
图1 收发测试

进行收发测试的程序为:
oidUSART_Polling_Sample(void)
  • {
  •      uint8_t Data = 0;
  •      printf("\r\nTest %s", __FUNCTION__);
  •      USART_Configure(115200);
  •      while (1)
  •      {
  •           if (SET == USART_GetFlagStatus(USART1, USART_FLAG_RXNE))
  •           {
  •                  Data = USART_ReceiveData(USART1);
  •                  USART_SendData(USART1, Data);
  •                  while (RESET == USART_GetFlagStatus(USART1, USART_FLAG_TC));
  •            }
  •       }
  • }
  • 复制代码

    在此基础上将串口与基于KT6368A的功能模块相配合,即可实现以蓝牙通讯来控制外部设备。KT6368A功能模块如图2所示,通过与USB转TTL模块的连接可进行基本的测试。
    image.png
    图2 功能模块

    image.png
    图3 连接形式

    若手机装有小程序LightBlue,则可搜寻到该蓝牙设备,见图4所示。
    image.png
    图4 连接测试

    通过LightBlue可进行数据的收发测试,见图5和图6所示。
    image.png
    图5 发送数据

    image.png
    图6 接收数据

    以此为基础,若将串口通信模块替换为Mini-F5333开发板,即可进行蓝牙通讯的控制功能。
    为简化设计的复杂度,这里以板载的4个LED为控制对象,并以指定的控制码来控制其亮灭。
    image.png
    图7 LED电路

    实现蓝牙通讯控制LED的主程序为:
    voidUSART_Polling_Sample(void)
  • {
  •     uint8_t Data = 0;
  •     USART_Configure(115200);
  •     while (1)
  •     {
  •         if (SET == USART_GetFlagStatus(USART1, USART_FLAG_RXNE))
  •         {
  •             Data = USART_ReceiveData(USART1);
  •             if(Data==0)
  •             {
  •                      PLATFORM_LED_Enable(LED1, DISABLE);
  •                      PLATFORM_LED_Enable(LED2, DISABLE);
  •                      PLATFORM_LED_Enable(LED3, DISABLE);
  •                      PLATFORM_LED_Enable(LED4, DISABLE);
  •              }
  •             if(Data==1)
  •             {
  •                      PLATFORM_LED_Enable(LED1, ENABLE);
  •                      PLATFORM_LED_Enable(LED2, DISABLE);
  •                      PLATFORM_LED_Enable(LED3, DISABLE);
  •                      PLATFORM_LED_Enable(LED4, DISABLE);
  •             }
  •             if(Data==2)
  •             {
  •                                 PLATFORM_LED_Enable(LED1, DISABLE);
  •                                 PLATFORM_LED_Enable(LED2, ENABLE);
  •                                 PLATFORM_LED_Enable(LED3, DISABLE);
  •                                 PLATFORM_LED_Enable(LED4, DISABLE);
  •               }
  •               if(Data==3)
  •               {
  •                                 PLATFORM_LED_Enable(LED1, DISABLE);
  •                                 PLATFORM_LED_Enable(LED2, DISABLE);
  •                                 PLATFORM_LED_Enable(LED3, ENABLE);
  •                                 PLATFORM_LED_Enable(LED4, DISABLE);
  •               }
  •                if(Data==4)
  •                {
  •                                 PLATFORM_LED_Enable(LED1, DISABLE);
  •                                 PLATFORM_LED_Enable(LED2, DISABLE);
  •                                 PLATFORM_LED_Enable(LED3, DISABLE);
  •                                 PLATFORM_LED_Enable(LED4, ENABLE);
  •                 }
  •                 if(Data==5)
  •                 {
  •                                PLATFORM_LED_Enable(LED1, ENABLE);
  •                                PLATFORM_LED_Enable(LED2, ENABLE);
  •                                PLATFORM_LED_Enable(LED3, ENABLE);
  •                                PLATFORM_LED_Enable(LED4, ENABLE);
  •                }
  •                while (RESET == USART_GetFlagStatus(USART1, USART_FLAG_TC));
  •         }
  •         PLATFORM_DelayMS(100);
  •     }
  • }
  • 复制代码

    经程序的编译和下载,其控制效果如图7所示,即依次方式0、1、2、3、4、5,可关闭LED、点亮LED1、点亮LED2点亮、LED3点亮LED4及电路全部LED。

    image.png
    图8 控制效果

    演示视频: