STM32F429HAL库UART学习笔记

发布者:JoyfulSpirit5最新更新时间:2020-02-02 来源: eefocus关键字:STM32F429HAL  UART 手机看文章 扫描二维码
随时随地手机看文章

UART串口通讯作为最基本通讯协议我就不多赘述。我主要用HAL库实现串口通讯,看一下配置Uart的结构一变量

 这里使用了结构体嵌套


typedef struct
{
  USART_TypeDef                 *Instance;         串口类型和串口内部控制寄存器结构体
  
  UART_InitTypeDef              Init;              定义串口输出数据类型停止位奇偶校验位的结构体
  
  uint8_t                       *pTxBuffPtr;      要发送的数据的缓冲数组指针
  
  uint16_t                      TxXferSize;     要发送数组大小
  
  uint16_t                      TxXferCount;    发送的个数
  
  uint8_t                       *pRxBuffPtr;     接受数据数组缓冲指针
  
  uint16_t                      RxXferSize;      接受数组大小
  
  uint16_t                      RxXferCount;    数组个数
  
  DMA_HandleTypeDef             *hdmatx;         发送的DMA配置结构体
    
  DMA_HandleTypeDef             *hdmarx;         接受的DMA配置结构体
  
  HAL_LockTypeDef               Lock;            判断数据加锁若加锁返回忙,若没加锁配置


  __IO HAL_UART_StateTypeDef    State;          UART状态位 
  
  __IO uint32_t                 ErrorCode;        判断错误类型  以上三个变量都是HAL调用用户基本用不到


}UART_HandleTypeDef;

原子哥的配置函数如下,定义串口1 波特率115200,修改就很简单了

 void uart1_init()
{
usart1_handler.Instance=USART1;
usart1_handler.Init.BaudRate=115200;   //波特率
usart1_handler.Init.WordLength=UART_WORDLENGTH_8B;   //字长为8位数据格式
usart1_handler.Init.StopBits=UART_STOPBITS_1;   //一个停止位
usart1_handler.Init.Parity=UART_PARITY_NONE;   //无奇偶校验位
usart1_handler.Init.HwFlowCtl=UART_HWCONTROL_NONE;   //无硬件流控
usart1_handler.Init.Mode=UART_MODE_TX_RX;   //收发模式
HAL_UART_Init(&usart1_handler);   //HAL_UART_Init()会使能UART1
 
}


再说一下GPIO配置HAL 开了一个配置头,里面什么都没有我们用到还是要自己配置

这里他们用了_weak 和 unused()这连个语法我是这样理解的,——weak就是让给用户一个编程头免去取名字的烦恼脑,UNUESD的作用就是防止编译器warring警告变量没有使用

看一下GPIO口配置模式比F1多了好几个数据手册还说多了锁存功能其实没什么用

#define IS_GPIO_MODE(MODE) (((MODE) == GPIO_MODE_INPUT)         ||浮空输入
                            ((MODE) == GPIO_MODE_OUTPUT_PP)     || 推挽输出
                            ((MODE) == GPIO_MODE_OUTPUT_OD)     ||开漏输出
                            ((MODE) == GPIO_MODE_AF_PP)         ||复用推挽输出
                            ((MODE) == GPIO_MODE_AF_OD)         ||复用开漏输出
                            ((MODE) == GPIO_MODE_IT_RISING)    ||外部触发上升沿触发
                            ((MODE) == GPIO_MODE_IT_FALLING)   ||外部触发下降沿触发
                            ((MODE) == GPIO_MODE_IT_RISING_FALLING) ||外部触发
                            ((MODE) == GPIO_MODE_EVT_RISING)         ||   事件管脚复用具体怎么用网上帖子很少目前不深究

                            ((MODE) == GPIO_MODE_EVT_FALLING)        ||
                            ((MODE) == GPIO_MODE_EVT_RISING_FALLING) ||
                            ((MODE) == GPIO_MODE_ANALOG))   模拟输入



void HAL_UART_MspInit(UART_HandleTypeDef *huart)
{
   
GPIO_InitTypeDef GPIO_Initure;

if(huart->Instance==USART1)//如果是串口1,进行串口1 MSP初始化
{
__HAL_RCC_GPIOA_CLK_ENABLE();//使能GPIOA时钟
__HAL_RCC_USART1_CLK_ENABLE();//使能USART1时钟

GPIO_Initure.Pin=GPIO_PIN_9;//PA9
GPIO_Initure.Mode=GPIO_MODE_AF_PP;//复用推挽输出 只要使用到复用就直接设为复用管脚否则不工作
GPIO_Initure.Pull=GPIO_PULLUP;//上拉
GPIO_Initure.Speed=GPIO_SPEED_FREQ_HIGH;//高速
GPIO_Initure.Alternate=GPIO_AF7_USART1;//复用为USART1这里我困惑了很久 原来是只有F4以上的板子才要配置这个复用配置F1和F3都不需要配置,直接I/O配置时给AFPP就好了,这里也是对复用端口正规了一下


HAL_GPIO_Init(GPIOA,&GPIO_Initure); //初始化PA9


GPIO_Initure.Pin=GPIO_PIN_10;//PA10

HAL_GPIO_Init(GPIOA,&GPIO_Initure); //初始化PA10

HAL_NVIC_EnableIRQ(USART1_IRQn);        //使能USART1中断通道
HAL_NVIC_SetPriority(USART1_IRQn,3,3);//抢占优先级3,子优先级3
}
  
}


中断优先级我的理解就是 抢占 和 顺序优先级 强占优先级高无论现在有没有中断发生只要你发生你就开始中断,不管有的中断有没有开始或正在进行。顺序优先级的作用就是两个强占优先级相同的中断到来你顺序高你先执行你执行完才执行下一个中断。 


接下来开始接受数据处理函数HAL库是给了在中断内部调用函数来处理中断的,接受用的是串口结构体句柄实现的

先使能接受中断,在接收中断服务函数中真正处理函数是下面这句话


HAL_UART_IRQHandler(&usart1_handler);

这个函数处理判断是什么中断和接受数据我们要自己编写一个回调函数在回调函数我们可以处理进行判断处理方法和F1板上的方法相同

串口通讯的功能就实现了


F4的内核是没有重映射这一说的只有复用功能查表也方便了很多呢


补充一下 使用到HAL 库的一些文件是

时钟配置RCC:stm32f429xx_hal_rcc.h

GPIO配置:stm32f429xx_hal_gpio.h   时钟复用配置:stm32f429xx_gpio_ex.h

UART配置:stm32f429xx_hal_uart.h 

程序中一些配置中断系统定义中断在 32f429xx.h(这个因你用的mcu的版本而定我用的是正点原子F429IGT)


关键字:STM32F429HAL  UART 引用地址:STM32F429HAL库UART学习笔记

上一篇:STM32F429HAL库时钟系统学习笔记
下一篇:STM32F105标准库读写USB写入csv文件

推荐阅读最新更新时间:2024-11-17 10:09

三ARM9(S3C2440)的串口UART——程序实例讲解
串口通信程序编写步骤 UART通信程序可以采用查询、中断和DMA模式。我们通过使用较多的中断方式来介UART通信程序的编写。简单做法是,UART通信程序的编写参照例子程序。 选通道,通过函数Uart_Select();选UART0~UART2; 选波特率和波特率发生器时钟,选波特率通过函数Uart_Pclk_En(int ch, int baud)或Uart_Pclk_En(int ch, int baud)来进行。时钟选UCLK ,rUCON0|=0x400;时钟选PCLK ,rUCON0&=0x3ff。 通信协议(rULCON0)设定,如果正常通信,一位停止位,8位数据位,无奇偶效验: rULCON0=(0 6
[单片机]
STM32红牛开发板非固件控制LED
摘要 STM32红牛开发板上的5个LED,接在GPIOF6~10脚,输出低电平时,LED亮。这样我们设置GPIOF的相关寄存器,让其输出低电平就可以让LED亮。因为没有用到ST提供的固件库,所以是直接对寄存器的内存地址读写,即对一个指向该地址的指针变量进行读写。并且该变量必须为易变型的,即用volatile定义,这样是为了告诉编译器不要去优化这个变量,导致其它一些寄存器的数据变化。GPIOx是挂载在APB2高速外设总线上的,最大频率是72MHZ,所以我们除了了打开HSE(外部高速时钟)并关闭内部高速时钟(开机默认选择了HSI)外,还要打开APB2总线的时钟。 一、寄存器地址映射 外设的基址PERI
[单片机]
STM8 用printf代替uart方法
在程序中添加:(头文件需要添加#include stdio.h ) #ifdef __GNUC__ #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) #else #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) #endif PUTCHAR_PROTOTYPE { //发送数据代码 return ch; } 出现identifier FILE is undefined,工程option中,如下选折: 需要在 IAR的Options - General Options - Library Confi
[单片机]
MSP430F169(二)——UART波特率
串口通信 1. 什么叫串口 串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。串行接口 (Serial Interface)是指数据一位一位地顺序传送。 与并行接口相比,其优点也非常明显: 成本低,最少需要一根线就可以完成传输; 没有数据的相互干扰,误码率相对较低; 缺点:传输速率相对较低。 2. 串口如何建立通信 对单片机有所了解的人都应该知道,串口通信是通过调配单片机内部的寄存器来控制速率。而MSP430F169内部最重要的几个配置无非是波特率的设置和多机通信。 2.1什么是波特率 在讲波特率之前我们要区分两个概念:波特率和比特率。 比特率: 比特率是指每秒传送
[单片机]
MSP430F169(二)——<font color='red'>UART</font>波特率
10-HAL之ADC电压采集
1.简介 12位ADC是逐次趋近型模数转换器,有19个复用通道(可测量16个外部源,2个内部源和1个VBAT通道的信号)。A/D转换可在单次、连续、扫描或不连续采样模式下进行,采样结果存储在1个16位数据寄存器中(实际只有12位数据)。 规则通道:一般所使用的通道; 注入通道:在规则通道转换时强行插入转换的通道,类似于中断。 ADC支持外部事件触发,包括内部定时器和外部IO。ADC输入时钟ADC_CLK由PCKL2经过分频产生,最大值是二分频54MHz,ADC允许最大值36MHz,典型值30MHz。 ADC的总转换时间=采样时间+12个周期. ADC转换后数据存放在ADC_DR寄存器(规则转换)或JDRx中
[单片机]
10-HAL<font color='red'>库</font>之ADC电压采集
SABIC四款热光树脂加入Zemax OpticStudio®材料数据
全球领先的多元化化工企业沙特基础工业公司(SABIC)今天宣布该公司的四款热光树脂已加入Zemax OpticStudio®的材料数据库中。Zemax OpticStudio®被视为光学设计行业的标准软件,新加入的这四款高性能材料包括两个牌号的高温LEXAN™ CXT聚碳酸酯(PC)共聚物、ULTEM™聚醚酰亚胺(PEI)树脂和EXTEM™聚酰亚胺树脂,均为首批被OpticStudio®收录的树脂材料,为设计师在进行光学传感器和镜头设计时提供除了玻璃和环氧树脂以外的创新材料选择。 SABIC的热塑性塑料可实现超越传统材料的性能优势,例如更快的加工速度以及实现自由形状光学元件的可能。 SABIC耐高温材料技术首席科学家Gabri
[物联网]
SABIC四款热光树脂加入Zemax OpticStudio®材料数据<font color='red'>库</font>中
tiny4412 UART 收发数据
Exynos4412 UART 的特性 Exynos4412 中UART,有4 个独立的通道,每个通道都可以工作于中断模式或DMA 模式,即 UART 可以发出中断或 DMA 请求以便在UART 、CPU 间传输数据。UART 由波特率发生器、发送器、接收器和控制逻辑组成。 使用系统时钟时,Exynos4412 的 UART 波特率可以达到 4Mbps 。波特率可以通过编程进行 。 Exynos4412 UART 的通道 0有 256 字节的发送 FIFO 和 256 字节的接收FIFO ;通道 1、4有 64 字节的发送 FIFO 和 64 字节的接收FIFO;通道 2、3有 16 字节的发送FIFO 和 16 字节 的
[单片机]
tiny4412 <font color='red'>UART</font> 收发数据
卡机器人参评“维科杯·OFweek 2022年度机器人行业中国市场卓越表现奖”
       维科杯·OFweek 2022中国 机器人 行业年度评选(简称OFweek Robot Awards 2022),是由中国高科技行业门户OFweek维科网及旗下权威的机器人专业媒体-OFweek维科网·机器人共同举办。该评选设立至今已有十余年,是中国机器人行业内的一大品牌盛会,亦是高科技行业具有专业性、影响力的评选之一。        此次活动旨在为机器人行业的产品、技术和企业搭建品牌传播展示平台,并借助OFweek维科网平台资源及影响力,向行业用户和市场推介创新产品与方案,鼓励更多企业投入技术创新;同时为行业输送更多创新产品、前沿技术,一同畅想机器人行业的未来。        今年,OFweek Robot Awa
[机器人]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved