没有合适的资源?快使用搜索试试~ 我知道了~
首页STM32CubeMX + HAL库 学习笔记
STM32CubeMX + HAL库 学习笔记
5星 · 超过95%的资源 需积分: 1 43 下载量 50 浏览量
更新于2023-03-03
评论 8
收藏 2.25MB PDF 举报
STM32CubeMX + HAL学习笔记,内容丰富,带源码,使用`STM32CubeMX`代码生成工具,不用关注底层配置的细节。
资源详情
资源评论
资源推荐
STM32CubeMX + HAL
一些说明
底层配置
Cube基本使用
HAL库函数
中断回调函数
外设对应时钟
配置示例
小编有话说
USART
RTC
SDIO + FATFS
SDRAM
LTDC + DMA2D
FreeRTOS
TouchGFX显示
LittleVGL
显示图片
C数组形式
canvas画图
文件系统
待补充...
STM32CubeMX + HAL
一些说明
底层配置
使用 STM32CubeMX 代码生成工具,不用关注底层配置的细节,真舒服。
使用教程:
https://sxf1024.lanzoui.com/b09rf2dwj 密码:bgvi
虽
然
Cube+HAL
很
舒
服
,
但
新
手
不
建
议
用
。
最
好
还
是
先
去
学
一
下
标
准
库怎
么
用
,
有
个
大
致
概
念
后
,
再
来
学
这
一
套
。
Cube基本使用
1. 新建工程
2. 选择芯片
3. Pinout&Configuration,选择 RCC(HSE:Crystal/Ceramic Resonator) 、 SYS(Debug:
Serial Wiire)
4. Clock Configuration,配置时钟树
5. Project Manager,配置工程输出项
6. Pinout&Configuration,选择功能(若是选 GPIO 相关,可以直接在Pinout view选择;若是其他功
能,可以在左边Categories打开,会自动配置引脚)、设置 Parameter Settings/NVIC 等
7. GENERATE CODE ,生成工程,用KEIL打开编辑
HAL库函数
函数形式:均以 HAL_ 开头
寻找过程:在驱动文件 stm32f4xx_hal_XXX.c 或其 .h 文件中找函数定义,一般在靠后位置
其他说明:
HAL 库并没有把所有的操作都封装成凼数。
对于底层的寄存器操作(如读取捕获/比较寄存器),还有修改外设的某个配置参数(如改变输入
捕获的极性), HAL 库会使用宏定义来实现。而且会用 __HAL_ 作为这类宏定义的前缀。
获取某个参数,宏定义中一般会有 _GET ;而设置某个参数的,宏定义中就会有 _SET 。
在开发过程中,如果遇到寄存器级别或者更小范围的操作时,可以到该外设的头文件中查
找,一般都能找到相应的宏定义。
HAL 库函数第一个参数一般都是句柄(一个包含了当前对象绝大部分状态的结构体),虽然增
加了开销,但是用起来便捷了非常多。
中断回调函数
函数形式: HAL_XXX_XXXCallback() 。
寻找过程:中断文件 stm32f4xx_it.c - > 中断函数 XXX_IRQHandler(void) -> HAL库中断函数
HAL_XXX_IRQHandler(GPIO_PIN_13) -> 回调函数 HAL_XXX_XXXCallback()
外设对应时钟
1. 随便进入一个外设初始化函数,如 MX_GPIO_Init()
2. 随便进入一个时钟使能函数,如 __HAL_RCC_GPIOC_CLK_ENABLE()
3. 随便进入一个RCC宏定义,如 RCC_AHB1ENR_GPIOCEN
4. 或者直接进入 stm32f429xx.h 文件
5. 里面有所有外设与时钟对应关系,如 RCC_AHB1ENR_DMA1EN
配置示例
小编有话说
例子源码:
https://sxf1024.lanzoui.com/b09rf535a 密码:bf5q
如果配置过程中,参数不知道怎么设置,可以去标准库例程(如野火、正点原子)中看对应的参数是
什么
Cube软件只是帮你配置了底层,一些初始化代码还是需要自己手动加的,如SDRAM充电初始化、读
写函数等
以下内容都是基于“野火F429IGT6挑战者V2开发板”,其他板子按照原理图改改引脚都能用的
USART
源码链接:
https://sxf1024.lanzoui.com/b09rf535a 密码:bf5q
详细教程网上挺多,配置也简单,只要勾选一下USARTx,再开一下中断就行。
在Keil就比较要注意了。
由于每次接收完,程序内部自动把接收中断关了,所以每次要手动打开。
总的来说,加这几部分:
main 函数中, while 之前:
任意位置添加printf重定向函数:
// 使能串口中断接收
HAL_UART_Receive_IT(&huart1, (uint8_t*)&DataTemp_UART1, 1);
1
2
任意位置添加中断回调函数:
RTC
#include "stdio.h"
int fputc(int ch, FILE *f){
HAL_UART_Transmit(&huart1, (uint8_t*)&ch, 1, 0XFF);
return ch;
}
1
2
3
4
5
#define UART1BuffLen 200
extern uint8_t DataBuff_UART1[UART1BuffLen];
extern uint32_t DataTemp_UART1;
extern uint16_t DataSTA_UART1;
uint32_t DataTemp_UART1;
uint8_t DataBuff_UART1[UART1BuffLen];
uint16_t DataSTA_UART1;
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart->Instance == USART1){
if(DataSTA_UART1 < UART1BuffLen){
if(DataTemp_UART1 == 0x0A && DataSTA_UART1>0 &&
DataBuff_UART1[DataSTA_UART1-1]==0X0D){
printf("USART: %s\r\n", DataBuff_UART1);
DataSTA_UART1 = 0;
}
else{
if(DataSTA_UART1 == 0){
memset(DataBuff_UART1, 0, sizeof(DataBuff_UART1));
}
DataBuff_UART1[DataSTA_UART1++] = DataTemp_UART1;
}
}
// 使能串口中断接收
HAL_UART_Receive_IT(&huart1, (uint8_t*)&DataTemp_UART1, 1);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
剩余28页未读,继续阅读
小锋学长生活大爆炸
- 粉丝: 8w+
- 资源: 47
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论5