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库定时器学习笔记
这些基础的东西看视频很费时间而且有过基础的在学习只是库不太清楚,希望我总结的库使用的一些使用能节约一点大家的时间. void TIM3_Init(u16 arr,u16 psc) { TI ...
- STM32F429HAL库ADCDMA学习笔记
昨天做了一个ADC的程序一直想学习一下DMA的配置,我一直也是不懂DMA到底有什么用处,还是感觉很鸡肋.稍微配置了一下,我是这样理解DMA的.在配置了dma之后我们adc的数据不会再由cpu搬运,我们 ...
- 【Python-pywt】 小波变化库—Pywavelets 学习笔记
(转载) [Python ]小波变化库--Pywavelets 学习笔记_nanbei2463776506的博客-CSDN博客 https://blog.csdn.net/nanbei24637765 ...
- 《C++标准库》学习笔记 — STL —流
<C++标准库>学习笔记 - STL -流 一.操控器 1.原理 2.自定义操控器 3.控制输入的宽度 二.自定义 I/O 操作符 1.重载输出操作符 2.输入操作符 三.自定义格式化标志 ...
- Lib库使用学习笔记
Lib库使用学习笔记 转自:http://blog.csdn.net/macky0668/article/details/6044867 技术前沿 2008-03-31 14:21:10 阅读177 ...
- 线性代数库 Armadillo 学习笔记
线性代数库 Armadillo 学习笔记 项目环境 Xcode 项目配置 前置代码 矩阵基本操作 全零矩阵 全一矩阵 对角矩阵 打印一个矩阵 修改获取矩阵元素 获取某行某列 获取对角向量 转置矩阵 逆 ...
- 点云库PCL学习笔记 -- 点云滤波Filtering -- 3. StatisticalOutlierRemoval 统计滤波器
点云库PCL学习笔记 -- 点云滤波Filtering -- 3.StatisticalOutlierRemoval 统计滤波器 StatisticalOutlierRemoval 统计滤波器相关简介 ...
- Python第三方库pygame学习笔记(一)
Pygame Python最经典的2D游戏开发第三方库,也支持3D游戏开发 Pygame适合用于游戏逻辑验证.游戏入门及系统演示验证 Pygame是一种游戏开发引擎,基本逻辑具有参考价值 pygame ...
- CImg库快速学习笔记
CImg库快速学习笔记 中山大学,曾坤老师的<计算机视觉>需要. 本文部分翻译自CImg_latest安装包中附带的英文文档的8 Class Documentation部分,以及互联网中的 ...
最新文章
- 【知识发现】基于物品的协同过滤推荐算法python实现
- S3C2410中断系统
- 操作系统 实验3【动态分区存储管理】
- 机器学习基础-多元线性回归-02
- 《阿里巴巴Android开发手册》正式发布
- 百度云服务器bcc搭建php环境,使用百度云服务器BCC经验谈
- win7 计算机 打开很慢,Win7电脑网上邻居(网络)打开速度慢的怎么解决?
- python使用sqlalchemy执行sql查询语句
- 华为nova 5全新外观曝光:水滴全面屏设计 边框下巴极窄
- matlab 矢量化编程(三) —— 软阈值函数
- 编译器在构造函数里都做了些什么?
- springcloud断路器修改熔断时间_SpringCloud(四)Hystrix服务降级,服务熔断
- win7 64位如何安装sql2005
- 基于Android的个人时间管理设计与开发
- 成为一名优秀高级项目经理的学习过程(今年学习方向)
- 技术牛人---章文嵩博士---阿里副总裁章文嵩:淘宝基础设施构建实践
- 程序员月薪3万?2020年12月程序员平均薪资14222元,招聘近40万人!
- 不讲武德的Python反爬神器『fake_useragent』
- 【区块链开发指南】区块链基础之区块和交易
- BrowserslistError: Unknown browser query `w`. Maybe you are using old Browserslist or made typo in q
热门文章
- 条款23: 必须返回一个对象时不要试图返回一个引用
- 对“流形”最好的讲解在维基
- java集合for循环_详解Java中list,set,map的遍历与增强for循环
- python跟人工智能的关系_Python和人工智能的关系
- 服务器架构设计文档,架构设计文档
- android 二级 滚动,android使用 ScrollerView 实现 可上下滚动的分类栏实例
- android添加工程依赖工程,Android Studio为项目加上模块依赖的图文方法
- Mysql生产环境表更新方案_生产环境中,数据库升级维护的最佳解决方案flyway
- android recyclerview添加头部,Android RecyclerView添加Header头部
- Spring Boot 2.x 多数据源配置之 JPA 篇