本帖最后由 聪聪哥哥 于 2025-7-24 08:08 编辑
一::STM32U385 串口知识分享
通用同步/异步收发器(USART)
这些设备有两个嵌入式通用同步接收器发送器(USART1和USART3)以及两个通用异步接收器发送器(UART4和UART5)
该USART提供了一个灵活的手段来执行全双工数据交换与外部设备需要一个行业标准的NRZ异步串行数据格式。可以通过一个分数波特率发生器来实现非常广泛的波特率范围。
USART支持同步单向和半双工单线通信,以及LIN(本地互连网络)、Smartcard协议、IrDA(红外数据协会)SIR ENDEC规范以及调制解调器操作(CTS/RTS)。同时,它也支持多处理器通信。
通过使用DMA(直接内存访问)和多缓冲配置,可以实现高速数据通信。
USART的主要特性包括:
全双工异步通信
NRZ标准格式(标记/空格)
通过16或8可配置的过采样方法,以实现速度和时钟容差之间的最佳平衡
波特率生成系统
两个内部FIFO用于传输和接收数据
每个FIFO可以通过软件启用/禁用,并带有状态标志。
一个通用的可编程传输和接收波特率
具有专用内核时钟的双时钟域,与PCLK独立的外设自动波特率检测
可编程数据字长度(7、8或9位)
可编程数据顺序,以最志有效位(MSB)或最低有效位(LSB)为先进行移位
二:原理图知识分享:
可见,调试器和单片机使用串口1建立通讯。
三:软件代码
任务如下:实现板载调试串口通讯,成果展示:以视频或截图的方式展示您的字符串打印输出“Hello 21ic, Hello NUCLEO-U385RG-Q!";
3.1 代码编写过程:
首先串口时钟使能,GPIO时钟使能: __HAL_RCC_GPIOA_CLK_ENABLE();
GPIO端口模式设置: __HAL_RCC_GPIOA_CLK_ENABLE();
串口参数初始化:static void MX_USART1_UART_Init(void)
开启中断并且初始化 HAL_NVIC_SetPriority(USART1_IRQn, 0, 0);
使能串口: HAL_NVIC_EnableIRQ(USART1_IRQn);
编写串口发送函数:
3.2 STM32 cube MX软件配置如下
3.3 代码如下所示:
const uint8_t OUTPUT_str[] = "Hello 21ic, Hello NUCLEO-U385RG-Q! autor by 聪聪哥哥 \r\n";
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
/* USER CODE BEGIN Callback 0 */
/* USER CODE END Callback 0 */
/* USER CODE BEGIN Callback 1 */
if (htim->Instance == TIM6)
{
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
HAL_UART_Transmit(&huart1,OUTPUT_str,sizeof(OUTPUT_str),100);
}
}
在定时器6中添加串口的输出函数,使用HAL_UART_Transmit 函数实现;
四:实物验证如下所示:
至此,串口1调试功能完成。
|