
1新建工程 1.1New Project ![]()
1.2设置RCC ![]()
1.3GPIO初始化 LED:4个GPIO_OUTPUT (输出模式) 按键:2个GPIO_EXITx(外部中断模式) ![]()
GPIO的各种模式设置 ![]()
这里可以看出看和我们使用库函数的时候配置是一样的,但我们只需要动几下鼠标便可以完成操作,这正是STM32CubeMX的强大之处 GPIO_EXIT的6种模式 ![]() 我们的按键选择下降沿触发 2 p& ^4 j8 V1 Z5 N1.4设置NVIC(嵌套向量中断控制器) ![]()
1.5时钟源设置 ![]()
32的时钟树框图 如果不懂的话请看《【STM32】系统时钟RCC详解(超详细,超全面)》 1.6项目文件设置 ![]()
![]() 1.7创建工程文件 然后点击GENERATE CODE 创建工程 ![]() 随后我们可以在stm32f1xx_it.c中看到我们所配置的中断服务函数 并且可以看到gpio的初始化分到了gpio.c里面 ![]() 我们看到他有一个HAL_GPIO_EXTI_IRQHandler();函数 Go To Definition 查看一下函数代码 ![]() 和我们库函数配置差不多,就是清除中断标志位,之后进入中断回调函数中 在HAL库中,中断运行结束后不会立刻退出,而是会先进入相对应的中断回调函数,处理该函数中的代码之后,才会退出中断,所以在HAL库中我们一般将中断需要处理代码放在中断回调函数中, * D* X( N% y- b/ r 配置下载工具 新建的工程所有配置都是默认的 我们需要自行选择下载模式,勾选上下载后复位运行 ![]() 所有自己编写的代码请放在/* USER CODE BEGIN XXX */ /* USER CODE END XXX */之间 这样我们修改工程的时候你自己写的代码就不会被删除 ![]() 在正常使用中,除了STM32CubeMX配置之外,我们有时候还需要自己配置一些东西,学习并理解HAL库,也是我们必须要学习的一个地方 首先打开stm32f4xx_hal_gpio.h 发现一共定义有8个函数
voidHAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init);/ z0 h: C2 ~5 X& z% _0 D0 \- X 功能: GPIO初始化 实例:HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); voidHAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin);7 G C9 I. d; Q- K9 G( q6 l功能:在函数初始化之后的引脚恢复成默认的状态,即各个寄存器复位时的值 实例:HAL_GPIO_Init(GPIOC, GPIO_PIN_4); GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);! T( B7 ~/ s: A* y% h) Z- K' g功能:读取引脚的电平状态、函数返回值为0或1 实例:HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_4); voidHAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);功能:引脚写0或1 实例:HAL_GPIO_WritePin(GPIOC, GPIO_PIN_4,0); voidHAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);# C1 Y6 z9 ?" S/ ?, b+ x! R翻转引脚的电平状态 实例:HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_4); 常用在LED上 HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);9 V+ K9 b& X' C/ I1 @功能:锁住引脚电平,比如说一个管脚的当前状态是1,当这个管脚电平变化时保持锁定时的值。 实例:HAL_GPIO_LockPin(GPIOC, GPIO_PIN_4); voidHAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin);9 c( E- D: W! @功能: 外部中断服务函数,清除中断标志位 实例:HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_4); voidHAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);5 F. o8 K3 t/ `1 [功能: 中断回调函数,可以理解为中断函数具体要响应的动作。 实例:HAL_GPIO_EXTI_Callback(GPIO_PIN_4); & `, k& U% J$ W* x, g0 z# lGPIO_InitTypeDef结构体定义
同时,不管是标准库还是HAL库,都是基于寄存器开发的,寄存器编程在哪个库都是适用的 GPIO的相关配置寄存器STM32的每组GPIO口包括7个寄存器。也就是说,每个寄存器可以控制一组GPIO的16个GPIO口。这7个寄存器分别为: GPIOx_CRL:端口配置低寄存器(32位)" ^6 l# x, R8 W8 g: h GPIOx_CRH:端口配置高寄存器(32位)' A; [: g; f& d) E GPIOx_IDR:端口输入寄存器(32位) GPIOx_ODR:端口输出寄存器(32位)* r/ ?9 B0 Z% ?. R( _; f GPIOx_BSRR:端口位设置/清除寄存器(32位) GPIOx_BRR:端口位清除寄存器(16位) GPIOx_LCKR:端口配置锁存寄存器(32位) 具体我们这里就不讲了,篇幅有限,可以到《STM32中文参考手册》中查看9 [( r0 U( W5 Q0 q: w0 S 关于GPIO的八种模式请参看 《STM32 GPIO八种模式及工作原理详解》 按键消抖:
|
新版STM32Cube for Visual Studio Code开发体验
【STM32N6570-DK评测】3.CubeMX关于DCMIPP和CSI的BUG整理及摄像头使用
经验分享常被误解的开、关总中断
【STM32C0测评】Nucleo-C092开发板功耗测试
【STM32C0测评】Nucleo-C092开发板IIC通信测试(硬件IIC)
【STM32C0测评】Nucleo-C092开发板IIC通信测试(软件IIC)
【STM32C0测评】Nucleo-C092开发板IIC通信测试(硬件软件IIC一网打尽)
【STM32C0测评】Nucleo-C092开发板USART串口测试
【STM32C0测评】Nucleo-C092开发板使用PWM控制板载LED呼吸灯
【STM32C0测评】Nucleo-C092板卡外部中断控制板载LED灯
写的不错,互支持一下。已点。
【STM32CubeMX】工欲善其事必先利其器之最强四大技巧* I, ~- Y$ _( v
https://www.stmcu.org.cn/module/forum/thread-623621-1-1.html
每个工程都拷一堆库,太浪费空间了,想把库统一放在工程外同一个位置。