【外设篇】STMG4芯片GPIO和中断NVIC的STM32CubeMx配置(基础工程)
引言:大家一定是忘记了GPIO的HAL库函数怎么用,所以开头先放你们需要的,最后再写原理。目前的板子是欧拉电子家卖的开发板,质量嘎嘎好,小伙伴们可以入手一个,另外在写完外设篇会出硬件篇,手把手教学制造我们自己的FOC板子(>.<)。
1. HAL库GPIO的API调用
相信大家都是为了快速实现项目而来的,话不多说,直接放GPIO的调用函数
| HAL库函数 | 功能 |
|
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5); |
翻转GPIO电平 |
| HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET); |
设置GPIO引脚状态
|
| HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_5) | 读取GPIO引脚状态,返回
|
| HAL_GPIO_DeInit(GPIOA, GPIO_PIN_5); | 释放GPIO引脚的配置 |
| HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); | 初始化GPIO(需要配置GPIO_InitStruct结构体,可参考生成的gpio.c文件或本文最后的内容) |
| HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin); | GPIO中断,(使用方式见第3个标题) |
2.Stm32CubeMx配置中断及GPIO
2.1如何选择GPIO模式

这里示例为驱动LED、实现按键功能,其中
LED为PC4及PC6,设置为普通推免输出,根据原理图,高电平熄灭,低电平点亮
按键为PC10、PC11、PC13,设置为GPIO中断模式,按键关闭为低电平,开启为高电平,可设置为引脚悬空,上升沿触发中断模式
2.2GPIO的引脚速度选择
至于GPIO的引脚速度选择,当使用其他外设时,可能需要复用GPIO,控制其输出速度
比如FOC算法是每10MHZ触发一次,速度很快,低速GPIO输出跟不上,则最好将GPIO速度提高。其中
| 速度 | 频率 | 应用场景 |
|---|---|---|
| 低速 | 2MHZ | LED的亮灭 |
| 中速 | 10MHZ | I2C波特率较低通信、FOC的三个驱动栅极上 |
| 高速 | 50MHZ | I2C、SPI波特率较高的通信上 |
| 超高速 | ||
| 注:可以在keil的debug模式下看右下角的时间(需提前在魔术棒里设置主频),测试某段程序的时间是否合适,逐次提高速度,或者不在乎功率的情况下,直接高速 | ||
最终实现两个相邻的上升沿和下降沿不接触,造成的没有高低的输出,或检测不到高低电平变化的现象
2.3Cube上的配置

设置名称、引脚悬空模式、上升沿触发中断
3.Keil5的代码说明
下面为GPIO的中断回调函数,当按键按下,给IO口上升沿时触发,大家可以在里面编写自己想用的代码。
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
/* Prevent unused argument(s) compilation warning */
UNUSED(GPIO_Pin);
if(Button1_Pin == GPIO_Pin)
{
HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);
}
if(Button2_Pin == GPIO_Pin)
{
HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);
}
if(Button3_Pin == GPIO_Pin)
{
HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_RESET);
HAL_GPIO_WritePin(LED2_GPIO_Port,LED2_Pin,GPIO_PIN_RESET);
}
/* NOTE: This function should not be modified, when the callback is needed,
the HAL_GPIO_EXTI_Callback could be implemented in the user file
*/
}
4.原理说明
搜索GPIO介绍啥的吧,网上好多,还比我写的好,我就不啰嗦了。
最后是叠甲部分,本科期间接触过FOC,想把在网上学到的知识外设、硬件、FOC分享给大家。目前刚刚研0,在老师创办的公司里实习,担任科研助理,并完成毕业设计(先画个饼,后续可能会换成英飞凌或者恩智浦等车规级芯片噢)。
由于技术水平有限,希望大家多多指教,并给予包容和理解。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)