打印
[STM32WB]

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

[复制链接]
762|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 jinglixixi 于 2024-11-17 08:12 编辑

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

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

2 引脚变化关系


对所用引脚的初始化函数为:
void LED_FAN_Init(void)
{
      GPIO_InitTypeDef  GPIO_InitStruct;
      __HAL_RCC_GPIOB_CLK_ENABLE();
      GPIO_InitStruct.Mode  = GPIO_MODE_OUTPUT_PP;
      GPIO_InitStruct.Pull  = GPIO_NOPULL;
      GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
      HAL_GPIO_Init(GPIOB, &GPIO_Init);
      GPIO_InitStruct.Pin = GPIO_PIN_1;
      HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
      GPIO_InitStruct.Pin = GPIO_PIN_2;
      HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
      HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);

相应的接收数据控制函数为:
void Data_Received(uint16_t length, uint8_t *data)
{
         if(data[0] == '1')
        {
                HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_1);
        }
        if(data[0] == '2')
        {                  
                HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_2);               
        }
        if(data[0] == '3')
        {                  
                HAL_GPIO_WritePin(GPIOB,  GPIO_PIN_1, GPIO_PIN_RESET);
                HAL_GPIO_WritePin(GPIOB,  GPIO_PIN_2, GPIO_PIN_RESET);               
        }
}

相应的主程序为:
int main(void)
{
  HAL_Init();
  SystemClock_Config();
  PeriphCommonClock_Config();
  MX_GPIO_Init();
  MX_RADIO_Init();
  MX_RADIO_TIMER_Init();
  MX_PKA_Init();
  LED_FAN_Init();
  while (1)
  {
          MX_APPE_Process();
  }
}

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


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

5 点亮状态


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

6 停止状态

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的接收数据中断服务函数在满足条件的情况下启动了这个服务事件。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

471

主题

2811

帖子

38

粉丝