【stm32】hal库学习笔记-UART/USART串口通信(超详细!)

本文详细介绍了如何在STM32开发中使用HAL库进行UART/USART串口通信,包括配置CubeMX图形化工具、设置RTC时钟和中断,以及实现实时时间的更新和显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【stm32】hal库学习笔记-UART/USART串口通信

hal库驱动函数

在这里插入图片描述

在这里插入图片描述

CubeMX图形化配置

导入LCD.ioc
RTC设置
在这里插入图片描述
时钟树配置
设置LSE为RTC时钟源
在这里插入图片描述USART设置
在这里插入图片描述中断设置
在这里插入图片描述

程序编写

编写主函数

  /* USER CODE BEGIN 2 */
  lcd_init();
  lcd_show_str(10, 10, 16, "Demo12_1:USART1-CH340", RED);
  lcd_show_str(10, 30, 16, "Please connect board with PC", RED);
  lcd_show_str(10, 50, 16, "via MiniUSB line before power on", RED);

  uint8_t hello1[] = "Hello, blocking\n";
  HAL_UART_Transmit(&huart1, hello1, sizeof(hello1), 500);
  HAL_Delay(10);

  uint8_t hello2[] = "Hello, none blocking\n";
  HAL_UART_Transmit_IT(&huart1, hello2, sizeof(hello2))
### STM32 HAL使用笔记及相关教程 #### 关于硬件和软件准备 在进行STM32 HAL学习之前,需要准备好相应的硬件设备以及开发环境。硬件方面可以选择DW1000模块搭配STM32单片机(推荐使用STM32F4系列),而软件则需安装Keil MDK作为主要的开发工具,并下载对应的STM32 HAL用于项目配置[^1]。 #### LCD显示功能实现 对于LCD显示功能的支持,可以参考具体的HAL学习资料。这些资源通常会详细介绍如何通过CubeMX完成基础配置、驱动文件的移植过程以及最终调用API来实现文字或图形界面展示的功能[^2]。以下是简单的代码片段演示: ```c // 初始化LCD并清屏 void lcd_init(void){ HAL_Delay(50); BSP_LCD_Init(); BSP_LCD_LayerDefaultInit(LCD_BACKGROUND_LAYER, LCD_FRAME_BUFFER); } // 显示字符串到指定位置 void display_string(uint8_t line, uint8_t column, char *str){ BSP_LCD_SetFont(&Font24); BSP_LCD_DisplayStringAtLine(line, (uint8_t *)str); } ``` #### 串口通信实践案例分享 另外,在嵌入式系统设计过程中,串口通信也是不可或缺的一部分。有关此主题的教学文档同样提供了详尽的操作指南,包括但不限于基本原理介绍、参数设置方法论以及实际应用场景下的编码技巧等内容[^3]。下面给出一段典型的UART发送接收处理逻辑样例: ```c #define USARTx_IRQHandler UART4_IRQHandler char RxBuffer[20]; volatile uint8_t flag = 0; void MX_USART_UART_Init(UART_HandleTypeDef* huart){ /* 配置省略 */ } void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){ if(huart->Instance==USARTx){ flag=1; HAL_UART_Receive_IT(huart,(uint8_t*)RxBuffer,sizeof(RxBuffer)-1); } } ``` #### I2C接口操作说明 当涉及到外设连接时,比如OLED屏幕这样的器件,则需要用到I2C总线协议来进行数据交换。这里也有一份针对初学者编写的入门级指导手册可供查阅,它清楚地标明了各管脚的作用及其电气特性描述[^4]。具体初始化流程如下所示: ```c static void MX_I2C1_Init(void){ hi2c1.Instance = I2Cx; hi2c1.Init.Timing = 0x00707DFF;//波特率计算结果填入此处 hi2c1.Init.OwnAddress1 = 0; hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT ; hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE; hi2c1.Init.GeneralCallMode= I2C_GENERALCALL_DISABLE ; hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_ENABLE ; if(HAL_I2C_Init(&hi2c1)!= HAL_OK ){ Error_Handler(); } } /* 发送一个字节给从设备 */ void i2c_send_byte(uint8_t addr,uint8_t reg,uint8_t data){ HAL_StatusTypeDef ret_val; ret_val = HAL_I2C_Mem_Write(&hi2c1 ,addr,I2C_MEMADD_SIZE_8BIT,data,1,100); if(ret_val != HAL_OK ) { Error_Handler(); } } ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值