#申请原创#
由资料可知STM32WB09KE配有USART和LPUART两种串口,借助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的接口上,所连接的引脚是GPIO23和GPIO24,这样与文本的串口设备就可以连接了!
在此基础上,为了能通过按键来控制乐曲的播放,需对按键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_1和SPK_2接到扬声器外,只将RX引脚接到开发板的UART1_TXD引脚即可。
图4 线路连接及播放
|