[STM32WB] 【STM32WB09KE测评】+蓝牙控制外设

[复制链接]
1435|2
 楼主| jinglixixi 发表于 2024-11-16 22:43 | 显示全部楼层 |阅读模式
本帖最后由 jinglixixi 于 2024-11-17 08:12 编辑

在厂家提供的例程中,有进行蓝牙通讯的程序框架,其工程名称为BLE_SerialPort_Server”。
该程序的用途是在蓝牙接收到指定长度的字节数据后,通过串口来输出接收的数据,其输出接收数据的函数为:
  1. void Data_Received(uint16_t length, uint8_t *data)
  2. {
  3.        for(uint16_t i = 0U; i < length; i++)
  4.        {
  5.              printf("%c", data[i]);
  6.        }  
  7. }

为了以蓝牙通讯的方式来控制外观的LED模块和风扇模块,是将LED模块连接到PB1,将风扇模块连接到PB2
68676738ae64d717f.png
1 引脚接口

281576738ae7c7a936.png
2 引脚变化关系


对所用引脚的初始化函数为:
  1. void LED_FAN_Init(void)
  2. {
  3.       GPIO_InitTypeDef  GPIO_InitStruct;
  4.       __HAL_RCC_GPIOB_CLK_ENABLE();
  5.       GPIO_InitStruct.Mode  = GPIO_MODE_OUTPUT_PP;
  6.       GPIO_InitStruct.Pull  = GPIO_NOPULL;
  7.       GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  8.       HAL_GPIO_Init(GPIOB, &GPIO_Init);
  9.       GPIO_InitStruct.Pin = GPIO_PIN_1;
  10.       HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  11.       GPIO_InitStruct.Pin = GPIO_PIN_2;
  12.       HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  13.       HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);

相应的接收数据控制函数为:
  1. void Data_Received(uint16_t length, uint8_t *data)
  2. {
  3.          if(data[0] == '1')
  4.         {
  5.                 HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_1);
  6.         }
  7.         if(data[0] == '2')
  8.         {                  
  9.                 HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_2);               
  10.         }
  11.         if(data[0] == '3')
  12.         {                  
  13.                 HAL_GPIO_WritePin(GPIOB,  GPIO_PIN_1, GPIO_PIN_RESET);
  14.                 HAL_GPIO_WritePin(GPIOB,  GPIO_PIN_2, GPIO_PIN_RESET);               
  15.         }
  16. }

相应的主程序为:
  1. int main(void)
  2. {
  3.   HAL_Init();
  4.   SystemClock_Config();
  5.   PeriphCommonClock_Config();
  6.   MX_GPIO_Init();
  7.   MX_RADIO_Init();
  8.   MX_RADIO_TIMER_Init();
  9.   MX_PKA_Init();
  10.   LED_FAN_Init();
  11.   while (1)
  12.   {
  13.           MX_APPE_Process();
  14.   }
  15. }

经程序的编译与下载,由手机上的LightBlue小程序可通过发送字节指令来控制外挂模块。
787436738af14039e5.png
3  发送控制字


在发送字节指令0X31时,LED模块会进行状态转换,见图4和图5所示。
263226738af2c389db.png
4  熄灭状态

719066738af3edf7e9.png
5 点亮状态


在发送字节指令0X32时,风扇模块会进行状态转换,见图6和图7所示。

897436738af544a41b.png
6 停止状态

14370673934df3dccc.png
7 转动状态


在发送字节指令0X33时,则LED和风扇模块均会停止。

sujingliang 发表于 2024-11-17 08:12 | 显示全部楼层
Data_Received是被谁调起来?在什么情况下被调起来?
 楼主| jinglixixi 发表于 2024-11-17 08:23 | 显示全部楼层
sujingliang 发表于 2024-11-17 08:12
Data_Received是被谁调起来?在什么情况下被调起来?

从程序追溯情况看是由函数BLEEVT_EvtAckStatus_t SERIALPORT_SERVER_EventHandler()来调用的,可以理解为是BLE的接收数据中断服务函数在满足条件的情况下启动了这个服务事件。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

525

主题

2964

帖子

39

粉丝
快速回复 在线客服 返回列表 返回顶部