打印
[STM32H7]

【STM32H745I-DISCO 试用】+串行通讯与唤醒测试

[复制链接]
100|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 jinglixixi 于 2025-3-22 21:17 编辑

在例程中配有一个通过串行通讯来进行唤醒处理的程序,它使用的引脚为:
Tx Pin: PB.10
Rx Pin: PB.11

通过查看原理图可知,它无需外部的串口模块连的接就可进行测试,即直接使用调试端口来测试。



图1 测试串口

该测试程序的主程序为:
<font _mstmutation="1" _msttexthash="171927635750" _msthash="844">int main(void)
{
MPU_Config();
CPU_CACHE_Enable();
HAL_Init();
SystemClock_Config();
BSP_LED_Init(LED1);
BSP_LED_Init(LED2);
BSP_LED_On(LED1);
UartHandle.Instance = USARTx;
UartHandle.Init.BaudRate = 9600;
UartHandle.Init.WordLength = UART_WORDLENGTH_8B;
UartHandle.Init.StopBits = UART_STOPBITS_1;
UartHandle.Init.Parity = UART_PARITY_ODD;
UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE;
UartHandle.Init.Mode = UART_MODE_TX_RX;
UartHandle.Init.ClockPrescaler = UART_PRESCALER_DIV1;
UartHandle.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
UartHandle.Init.OverSampling = UART_OVERSAMPLING_16;
if(HAL_UART_Init(&UartHandle) != HAL_OK)
{
Error_Handler();
HAL_UARTEx_SetRxFifoThreshold(&UartHandle, UART_RXFIFO_THRESHOLD_1_4);
HAL_UARTEx_EnableFifoMode(&UartHandle);
HAL_UART_Transmit(&UartHandle, (uint8_t*)&HeaderTxBuffer, countof(HeaderTxBuffer)-1, HAL_TIMEOUT_VALUE);
HAL_UARTEx_EnableStopMode(&UartHandle);
__HAL_UART_ENABLE_IT(&UartHandle, UART_IT_RXFT);
__HAL_UART_ENABLE_IT(&UartHandle, UART_IT_WUF);
HAL_UART_Transmit(&UartHandle, (uint8_t*)&Part1TxBuffer, countof(Part1TxBuffer)-1, HAL_TIMEOUT_VALUE);
HAL_UART_Receive_IT(&UartHandle, (uint8_t*)&RxBuffer, 3);
BSP_LED_Off(LED1);
HAL_PWR_EnterSTOPMode(PWR_MAINREGULATOR_ON,PWR_STOPENTRY_WFI);
while(HAL_UART_GetState(&UartHandle) != HAL_UART_STATE_READY)
{
}
BSP_LED_On(LED1);
__HAL_UART_DISABLE_IT(&UartHandle, UART_IT_WUF);
__HAL_UART_DISABLE_IT(&UartHandle, UART_IT_RXFT);
HAL_UARTEx_DisableStopMode(&UartHandle);
HAL_UART_Transmit(&UartHandle, (uint8_t*)&WakeupRXFTBuffer, countof(WakeupRXFTBuffer)-1, HAL_TIMEOUT_VALUE);
HAL_UARTEx_EnableStopMode(&UartHandle);
__HAL_UART_ENABLE_IT(&UartHandle, UART_IT_RXFF);
__HAL_UART_ENABLE_IT(&UartHandle, UART_IT_WUF);
HAL_UART_Transmit(&UartHandle, (uint8_t*)&Part2TxBuffer, countof(Part2TxBuffer)-1, HAL_TIMEOUT_VALUE);
HAL_UART_Receive_IT(&UartHandle, (uint8_t*)&RxBuffer, 15);
BSP_LED_Off(LED1);
HAL_PWR_EnterSTOPMode(PWR_MAINREGULATOR_ON,PWR_STOPENTRY_WFI);
while(HAL_UART_GetState(&UartHandle) != HAL_UART_STATE_READY)
{
}
BSP_LED_On(LED1);
__HAL_UART_DISABLE_IT(&UartHandle, UART_IT_WUF);
__HAL_UART_DISABLE_IT(&UartHandle, UART_IT_RXFF);
HAL_UARTEx_DisableStopMode(&UartHandle);
HAL_UART_Transmit(&UartHandle, (uint8_t*)&WakeupRXFFBuffer, countof(WakeupRXFFBuffer)-1, HAL_TIMEOUT_VALUE);
HAL_UART_Transmit(&UartHandle, (uint8_t*)&FooterTxBuffer, countof(FooterTxBuffer)-1, HAL_TIMEOUT_VALUE);
while(1) { ; }</font>
}



通过对程序的分析可知,在测试时需将串口的波特率设置为9600bps,数据位数为7位,1个停止位,采用奇校验。

图2 串口设置

经程序的编译和下载,其测试过程如图3至图5所示。

图3 上电复位后的提示信息

在按提示信息输入4个字节的数据后,其提示信息如图4所示,让再输入16个字节,不会是这样一直倍增下去吧?

图4 完成输入后的提示信息

还好,在输入完16字节数据后,测试终于结束了,其内容如图5所示。

图5 完成测试

通过这次,我们可以掌握串口的收发及由静止模式唤醒的处理方法。

以此为基础,通过串口通讯还可实现语音模块的播放控制。
语音模块的引脚发布如图6所示,通常情况下将RX引脚与开发板的TXD引脚即可。

图6 引脚排列

由于语音模块在工作时是采用9600bps的波特率,8位数据,1位停止位且无校验位,故在使用时需对串口的配置稍加修改。
修改后的主程序为:
<font _mstmutation="1" _msttexthash="16541654701" _msthash="417">int main(void)
{
MPU_Config();
CPU_CACHE_Enable();
HAL_Init();
SystemClock_Config();
BSP_LED_Init(LED1);
BSP_LED_Init(LED2);
BSP_LED_On(LED1);
UartHandle.Instance = USARTx;
UartHandle.Init.BaudRate = 9600;
UartHandle.Init.WordLength = UART_WORDLENGTH_8B;
UartHandle.Init.StopBits = UART_STOPBITS_1;
UartHandle.Init.Parity = UART_PARITY_NONE;
UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE;
UartHandle.Init.Mode = UART_MODE_TX_RX;
UartHandle.Init.ClockPrescaler = UART_PRESCALER_DIV1;
UartHandle.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
UartHandle.Init.OverSampling = UART_OVERSAMPLING_16;
} if(HAL_UART_Init(&UartHandle) != HAL_OK){

Error_Handler();
}
HAL_UARTEx_SetRxFifoThreshold(&UartHandle, UART_RXFIFO_THRESHOLD_1_4);
HAL_UARTEx_EnableFifoMode(&UartHandle);
playn(3);
HAL_UART_Transmit(&UartHandle, (uint8_t*)&cmd3, countof(cmd3), HAL_TIMEOUT_VALUE);
while(1) { ; }</font>
}

经程序的编译与下载,其测试结果如图7所示。

图7 测试结果

此时,还有一个问题要解决,那就是所用的串行通讯引脚从哪里获得,因为在测试时是通过调试口来进行,而控制语音模块是需要引脚来连接的。
通过搜寻,终于发现可从CN4的接口来获得,只是该引脚的间距很小,需要通过匹配的连接件来连接。

图8 引脚连接接口



使用特权

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

本版积分规则

481

主题

2838

帖子

38

粉丝