串口发送通信---UART发送---STM32F4实现
串口发送程序配置过程(HAL库)
- 初始化串口相关参数,使能串口
HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart)
该函数的参数是串口的基址,在stm32f429xx.h文件中,定义了8个UART_HandleTypeDef的值,分别是USART1、USART2、USART3、UART4、UART5、USART6、UART7、UART8,可以用HAL_UART_Init对这8个串口进行初始化,我们要用USART1,就填USART1
- 串口相关IO口配置,复用配置
在HAL_UART_MspInit中调用HAL_GPIO_Init函数
- 发送数据,并等待数据发送完毕
HAL_UART_Transmit()
具体代码
我们以STM32F4中的 PA9和PA10的UART1通信为例。
- 首先是初始化串口相关参数,使能串口,使用的函数是HAL_UART_Init(),我们定义一个函数来调用它,具体代码如下:
UART_HandleTypeDef usart_handler;void usart1_init(void)
{usart_handler.Instance = USART1; //指定用哪个串口usart_handler.Init.BaudRate = 115200; //波特率设置usart_handler.Init.HwFlowCtl = UART_HWCONTROL_NONE; //硬件流控制usart_handler.Init.Mode = UART_MODE_TX_RX; //接收or发送or接收发送//usart_handler.Init.OverSampling = usart_handler.Init.Parity = UART_PARITY_NONE; //奇偶校验usart_handler.Init.StopBits = UART_STOPBITS_1; //停止位usart_handler.Init.WordLength = UART_WORDLENGTH_8B; //字长HAL_UART_Init(&usart_handler);}
HAL_UART_Init函数要传入一个UART_HandleTypeDef 的指针,该指针指向一个结构体,我们要对其初始化。具体要初始化两个变量,一个变量是Instance ,指定使用哪个串口通信,另一个是Init,指明波特率、有无硬件控制流、模式、有无奇偶校验、有几个停止位以及每次传入的数据是几位。
- HAL_UART_Init初始完后,会自动调用HAL_UART_MspInit函数,在这个函数中,我们进行GPIO口的初始化以及使能,代码如下
//HAL_UART_Init会自动调用HAL_UART_MspInitvoid HAL_UART_MspInit(UART_HandleTypeDef *huart)
{if(huart->Instance == USART1){GPIO_InitTypeDef GPIO_Initure;__HAL_RCC_GPIOA_CLK_ENABLE();__HAL_RCC_USART1_CLK_ENABLE();//GPIO口初始化就配置好了复用功能GPIO_Initure.Pin=GPIO_PIN_9; //PA9GPIO_Initure.Mode=GPIO_MODE_AF_PP; //复用推挽输出GPIO_Initure.Pull=GPIO_PULLUP; //上拉GPIO_Initure.Speed=GPIO_SPEED_FAST; //高速GPIO_Initure.Alternate=GPIO_AF7_USART1; //复用为USART1HAL_GPIO_Init(GPIOA,&GPIO_Initure); //初始化PA9GPIO_Initure.Pin=GPIO_PIN_10; //PA10HAL_GPIO_Init(GPIOA,&GPIO_Initure); //初始化PA10}}
因为要复用引脚,所以在配置GPIO口时,我们要配置Alternate变量,指明要复用的引脚功能,即GPIO_AF7_USART1,PA9和PA10作为USART1的引脚。
HAL_UART_MspInit每个HAL_UART_Init都会调用,我们不知道是哪一个串口调用的,所以我们要根据Instance 来判断是哪一个串口调用的。
- 两个函数配置完成后,我们就可以发送数据了,我们在main函数里面调用HAL_UART_Transmit来发送数据,具体代码为
int main(void)
{u8 buff[] = "send to rec";HAL_Init();Stm32_Clock_Init(360,25,2,8);delay_init(180);usart1_init();while(1) {HAL_UART_Transmit(&usart_handler,buff,sizeof(buff),1000);delay_ms(300);}}
HAL_UART_Transmit第一个参数指明用哪个串口来发送数据,第二个参数是指向数据的指针,第三个参数是数据的大小,第四个是 Timeout duration 。
结果
串口发送通信---UART发送---STM32F4实现相关推荐
- 4、Proteus仿真STM32串口通信,发送数据控制LED流水灯的启动和停止
一.实验说明 本次实验建立在第三个实验基础上,稍加修改,通过串口调试助手发送数据到Proteus来实现对流水灯的启动和停止,所以实验采用2个通信串口,实验原理非常简单,只要熟悉第三次实验的过程,就非常 ...
- STM32-串口通信(串口的接收和发送)
文章目录 STM32的串口通信 一.STM32里的串口通信 二.串口的发送和接收 串口发送 串口接收 三.串口在STM32中的配置 四.串口接收的两种实现方式 1. 需要更改的地方 2. 查询RXNE ...
- STM32学习笔记(5) 串口通讯-接收与发送
一 通信的基本概念 串口并行与串行 数电课讲过,并行速度快但占用的门电路多,耗费空间 串行速度慢但节约空间 数据通信方向 全双工:TX,RX同时收发数据 半双工:不能同时收发数据,可分时收发数据 单工 ...
- 串口通信--UART
一.串行通信 串行通信指的是:数据字节位通过一根总线,单bit位,一位一位输出或者输入: 常见的串行通信方式有:usart.iic.spi等,本文着重介绍UART: 二.UART介绍 UART也叫通用 ...
- 英飞凌TC264学习(四)串口通信UART
英飞凌TC264学习(四)串口通信UART 串口部分的函数在LQ_UART.c中 TC264有四路UART中断,需要中断可以来配置中断,与外部中断一样,中断服务函数,中断号,优先级,不需要中断的话就不 ...
- RS232串口通信(UART的接收部分)
RS232串口通信(UART的接收部分) 置顶 新人博主,创作不易,波形图手绘,请给个点赞关注吧,非常感谢! 串口简介 串口作为常用的三大低速总线(UART.SPI.IIC)之一,在设计众多通信接 ...
- (48)Verilog HDL UART发送设计
(48)Verilog HDL UART发送设计 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)Verilog HDL UART发送设计 5)结语 1.2 FPGA简介 ...
- 8 SystemVerilog语言编写UART发送
2.08 SystemVerilog语言编写UART发送 2.8.1 本节目录 1)章节目录: 2)FPGA简介: 3)SystemVerilog简介: 4)SystemVerilog语言编写UART ...
- (8)verilog语言编写UART发送
2.8 verilog语言编写UART发送 2.8.1 本节目录 1)本节目录: 2)FPGA简介: 3)verilog简介: 4)verilog语言编写UART发送: 5)本节结束. 2.8.2 F ...
最新文章
- PHP函数之日期时间函数date()使用详解
- 服务器备份文件ctf,GUET-CTF 题目备份
- AAAI 2021 | 从语义关系建模的角度进行句子语义关系匹配
- ora-39142,ora-39001,ora-39000
- 程序员必知的 Python 陷阱与缺陷列表
- ApI、toString方法、equals方法、Scanner方法基本知识
- simulink和psim仿真结果不同_Abaqus软件掌握大部件焊接仿真的解决思路
- cannot deserialize from Object value
- ECharts 前端数据可视化
- WebRoot与WebContent区别
- 微信小程序更改checkbox和radio样式
- python找零_Python 找零问题
- 论文期刊快速发表的方法
- 2021年全球高级计量基础设施(AMI)收入大约3202.8百万美元,预计2028年达到4764.5百万美元
- 国投瑞银创新基金对基金市场有何影响
- CSDN中markdown编辑器如何实现首行缩进
- iperf测试带宽的问题 -- 上下行带宽差距大
- skynet 学习笔记分享
- DrawerLayout实现侧滑菜单效果
- 于小c语言,论网友们如何看待前几日PDD在,主播余小c直播间的发言?