[STM32WB] 【STM32WB09KE测评】+串口通讯及应用

[复制链接]
 楼主| jinglixixi 发表于 2024-11-2 16:46 | 显示全部楼层 |阅读模式
<
#申请原创#


由资料可知STM32WB09KE配有USARTLPUART两种串口,借助UART不但可以实现串行通讯,还可以控制有相应功能的串口设备,如串口屏、双PWM调节模块、超声波测距仪、数据记录模块等。
为便于使用,这里用UART1来控制一款具有串口控制功能的MP3播放模块。
在具体实现MP3播放模块控制前,先要解决UART1的数据发送功能。
由于MP3播放模块的波特率9600bps,故 UART1的初识化函数为:
  1. static void MX_USART1_UART_Init(void)
  2. {
  3.   huart1.Instance = USART1;
  4.   huart1.Init.BaudRate = 9600;
  5.   huart1.Init.WordLength = UART_WORDLENGTH_8B;
  6.   huart1.Init.StopBits = UART_STOPBITS_1;
  7.   huart1.Init.Parity = UART_PARITY_NONE;
  8.   huart1.Init.Mode = UART_MODE_TX_RX;
  9.   huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  10.   huart1.Init.OverSampling = UART_OVERSAMPLING_16;
  11.   huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  12.   huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
  13.   huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  14.   if (HAL_UART_Init(&huart1) != HAL_OK)
  15.   {
  16.     Error_Handler();
  17.   }
  18.   if (HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
  19.   {
  20.     Error_Handler();
  21.   }
  22.   if (HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
  23.   {
  24.     Error_Handler();
  25.   }
  26.   if (HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK)
  27.   {
  28.     Error_Handler();
  29.   }
  30. }

为进行串口发送字节指令的测试,其主程序为:
  1. uint8_t zl[10]={0x7E,0xFF,0x06,0x03,0x00,0x00,0x01,0xFE,0xF7,0xEF};

  2. int main(void)
  3. {
  4.   HAL_Init();
  5.   SystemClock_Config();
  6.   PeriphCommonClock_Config();
  7.   MX_GPIO_Init();
  8.   MX_USART1_UART_Init();
  9. HAL_UART_Transmit(&huart1,zl, 10, 0xFFFF);
  10.   while (1)
  11.   {
  12.   }
  13. }

其中,数组zl中存放放的是一条播放指令,共有10个字节。
经程序的编译和下载,其测试结果如图1所示,说明字节指令发送有效。
262906725e6317f28a.png
1 串口测试
由资料可知,UART1的引脚连接关系为:
PB0  ------> USART1_RX
PA1  ------> USART1_TX
现在问题来了,前面一直是通过USB来进行通讯测试,现在UART1的引脚究竟在哪儿呢?
经反复查找才发现,原来它隐藏在CN3的接口上,所连接的引脚是GPIO23GPIO24,这样与文本的串口设备就可以连接了!

704406725e64fcea0e.png

在此基础上,为了能通过按键来控制乐曲的播放,需对按键B2进行设置。
B2所连接的引脚为PB5,对该引脚的初始化语句为:
BSP_PB_Init(B2, BUTTON_MODE_GPIO);
这样,就可以通过按键B2来控制播放,即每触动一次按键,就自动指向下一首歌曲进行播放。
实现MP3播放控制的主程序为:
  1. int main(void)
  2. {
  3.   int n=1;
  4.   HAL_Init();
  5.   SystemClock_Config();
  6.   PeriphCommonClock_Config();
  7. BSP_PB_Init(B2, BUTTON_MODE_GPIO);
  8.   MX_GPIO_Init();
  9.   MX_USART1_UART_Init();
  10.   while (1)
  11.   {
  12. if(BSP_PB_GetState(B2)==1)
  13.           {
  14. while (BSP_PB_GetState(B2)==1);
  15.                         n=n+1;
  16.                         playn(n);
  17.                         HAL_UART_Transmit(&huart1,zl, 10, 0xFFFF);
  18.           }
  19.           HAL_Delay(100);
  20. }
  21. }

其中,函数 playn()的功能是将n的计数值转换为相应的播放控制指令。
经程序的编译和运行,其结果如图2所示,即每按下一次B2键就发送一条播放下一首歌曲的指令。
768556725e6847c099.png
2 测试效果
这样,在连接MP3播放模块的情况下,就可以播放音乐了。
MP3播放模块的引脚分布如图3所示。
37036725e6985da0b.png
3 引脚分布
在最简单的使用情况下,需连接电源及将SPK_1SPK_2接到扬声器外,只将RX引脚接到开发板的UART1_TXD引脚即可。

185916725e6ac5b1e5.png
4 线路连接及播放


21mengnan 发表于 2024-11-28 18:43 | 显示全部楼层
操作起来跟其他STM32的蓝牙方式一样,很好。
 楼主| jinglixixi 发表于 2024-11-28 18:54 | 显示全部楼层
21mengnan 发表于 2024-11-28 18:43
操作起来跟其他STM32的蓝牙方式一样,很好。

哦,是的。
yangjiaxu 发表于 2024-11-29 14:10 | 显示全部楼层
不错不错,这种开发板搞串口搞蓝牙之类的都是非常奈斯的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

517

主题

2932

帖子

39

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