打印
[STM32WB]

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

[复制链接]
1634|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
#申请原创#


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

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

int main(void)
{
  HAL_Init();
  SystemClock_Config();
  PeriphCommonClock_Config();
  MX_GPIO_Init();
  MX_USART1_UART_Init();
HAL_UART_Transmit(&huart1,zl, 10, 0xFFFF);
  while (1)
  {
  }
}

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


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

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

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 | 只看该作者
不错不错,这种开发板搞串口搞蓝牙之类的都是非常奈斯的

使用特权

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

本版积分规则

464

主题

2778

帖子

38

粉丝