STM32G4HAL库串口
时间: 2024-12-30 12:17:26 浏览: 71
### STM32G4 HAL库串口通信使用方法
#### 初始化配置
为了实现STM32G4系列微控制器上的UART接口初始化,需调用`MX_USART1_UART_Init()`函数来完成硬件资源分配以及参数设定工作。此过程通常由CubeMX工具自动生成相应代码片段[^1]。
```c
// USART1 Initialization Function
static void MX_USART1_UART_Init(void)
{
huart1.Instance = USART1;
huart1.Init.BaudRate = 115200;
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;
if (HAL_UART_Init(&huart1) != HAL_OK)
{
Error_Handler();
}
}
```
#### 数据发送操作
当准备向外部设备传输字符流时,可以采用如下方式构建并执行发送指令:
```c
char tx_buf[] = "jin ke\r\n";
if(HAL_UART_Transmit(&huart1, (uint8_t*)tx_buf, strlen(tx_buf), 50)!= HAL_OK){
// 发送失败处理逻辑
}
```
上述代码段展示了如何利用`sprintf`填充待发消息至缓冲区内存区域,并借助`HAL_UART_Transmit` API 实现实际的数据传送动作。这里指定了USART1作为目标端口对象,同时设定了最大等待响应时间不超过五十毫秒[^2]。
#### 接收数据处理
对于接收来自其他装置的信息,则可通过中断驱动模式或者轮询机制两种途径达成目的。下面给出了一种简单的非阻塞型读取方案示例:
```c
void ReceiveDataNonBlocking(UART_HandleTypeDef *huart,uint8_t* rxBuffer,int bufferSize){
uint8_t temp=0;
while(__HAL_UART_GET_FLAG(huart,UART_FLAG_RXNE)){
temp = huart->Instance->DR & (uint8_t)0xFF;
if(temp == '\r' || temp=='\n'){
break;
}else{
*rxBuffer++ = temp;
if(--bufferSize==0)return ;
}
}
}
int main(){
char rx_buffer[64]={0};
while(1){
ReceiveDataNonBlocking(&huart1,rx_buffer,sizeof(rx_buffer));
printf("Received:%s",rx_buffer);
memset(rx_buffer,0,sizeof(rx_buffer));// 清空缓存区以便下次接收新数据
}
}
```
这段程序定义了一个名为`ReceiveDataNonBlocking` 的辅助函数用于持续监听是否有新的输入到达;一旦检测到有效载荷即刻将其追加到指定的目标数组里直至遇到回车符为止。主循环部分负责周期性的调用该功能模块并将最终结果打印出来供调试观察之用。
阅读全文
相关推荐


















