串口发送程序配置过程(HAL库)

  1. 初始化串口相关参数,使能串口
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

  1. 串口相关IO口配置,复用配置
在HAL_UART_MspInit中调用HAL_GPIO_Init函数
  1. 发送数据,并等待数据发送完毕
HAL_UART_Transmit()

具体代码

我们以STM32F4中的 PA9和PA10的UART1通信为例。

  1. 首先是初始化串口相关参数,使能串口,使用的函数是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,指明波特率、有无硬件控制流、模式、有无奇偶校验、有几个停止位以及每次传入的数据是几位。

  1. 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 来判断是哪一个串口调用的。

  1. 两个函数配置完成后,我们就可以发送数据了,我们在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实现相关推荐

  1. 4、Proteus仿真STM32串口通信,发送数据控制LED流水灯的启动和停止

    一.实验说明 本次实验建立在第三个实验基础上,稍加修改,通过串口调试助手发送数据到Proteus来实现对流水灯的启动和停止,所以实验采用2个通信串口,实验原理非常简单,只要熟悉第三次实验的过程,就非常 ...

  2. STM32-串口通信(串口的接收和发送)

    文章目录 STM32的串口通信 一.STM32里的串口通信 二.串口的发送和接收 串口发送 串口接收 三.串口在STM32中的配置 四.串口接收的两种实现方式 1. 需要更改的地方 2. 查询RXNE ...

  3. STM32学习笔记(5) 串口通讯-接收与发送

    一 通信的基本概念 串口并行与串行 数电课讲过,并行速度快但占用的门电路多,耗费空间 串行速度慢但节约空间 数据通信方向 全双工:TX,RX同时收发数据 半双工:不能同时收发数据,可分时收发数据 单工 ...

  4. 串口通信--UART

    一.串行通信 串行通信指的是:数据字节位通过一根总线,单bit位,一位一位输出或者输入: 常见的串行通信方式有:usart.iic.spi等,本文着重介绍UART: 二.UART介绍 UART也叫通用 ...

  5. 英飞凌TC264学习(四)串口通信UART

    英飞凌TC264学习(四)串口通信UART 串口部分的函数在LQ_UART.c中 TC264有四路UART中断,需要中断可以来配置中断,与外部中断一样,中断服务函数,中断号,优先级,不需要中断的话就不 ...

  6. RS232串口通信(UART的接收部分)

    RS232串口通信(UART的接收部分) 置顶 新人博主,创作不易,波形图手绘,请给个点赞关注吧,非常感谢! 串口简介 ​ 串口作为常用的三大低速总线(UART.SPI.IIC)之一,在设计众多通信接 ...

  7. (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. 8 SystemVerilog语言编写UART发送

    2.08 SystemVerilog语言编写UART发送 2.8.1 本节目录 1)章节目录: 2)FPGA简介: 3)SystemVerilog简介: 4)SystemVerilog语言编写UART ...

  9. (8)verilog语言编写UART发送

    2.8 verilog语言编写UART发送 2.8.1 本节目录 1)本节目录: 2)FPGA简介: 3)verilog简介: 4)verilog语言编写UART发送: 5)本节结束. 2.8.2 F ...

最新文章

  1. PHP函数之日期时间函数date()使用详解
  2. 服务器备份文件ctf,GUET-CTF 题目备份
  3. AAAI 2021 | 从语义关系建模的角度进行句子语义关系匹配
  4. ora-39142,ora-39001,ora-39000
  5. 程序员必知的 Python 陷阱与缺陷列表
  6. ApI、toString方法、equals方法、Scanner方法基本知识
  7. simulink和psim仿真结果不同_Abaqus软件掌握大部件焊接仿真的解决思路
  8. cannot deserialize from Object value
  9. ECharts 前端数据可视化
  10. WebRoot与WebContent区别
  11. 微信小程序更改checkbox和radio样式
  12. python找零_Python 找零问题
  13. 论文期刊快速发表的方法
  14. 2021年全球高级计量基础设施(AMI)收入大约3202.8百万美元,预计2028年达到4764.5百万美元
  15. 国投瑞银创新基金对基金市场有何影响
  16. CSDN中markdown编辑器如何实现首行缩进
  17. iperf测试带宽的问题 -- 上下行带宽差距大
  18. skynet 学习笔记分享
  19. DrawerLayout实现侧滑菜单效果
  20. 于小c语言,论网友们如何看待前几日PDD在,主播余小c直播间的发言?

热门文章

  1. angular学习的一些小笔记(中)之ng-disabled轻松实现按钮是否可点击状态
  2. 跨平台开发框架 Lynx 初探
  3. js笔记(六)事件、正则
  4. js 实现文件导出、文件下载
  5. CODEVS 1205 单词反转
  6. Ubuntu+vscode打不开
  7. python函数-函数进阶
  8. C++服务器设计(七):聊天系统服务端实现
  9. UNITY3D与iOS交互解决方案
  10. 广元南山隧道南河互通立交图_广元城区一隧道工程竣工时间已定,今后出行更加方便了!...