引言:大家一定是忘记了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引脚状态

  • GPIO_PIN_SET:引脚为高电平。
  • GPIO_PIN_RESET:引脚为低电平。
HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_5) 读取GPIO引脚状态,返回
  • GPIO_PIN_SET:引脚为高电平。
  • GPIO_PIN_RESET:引脚为低电平。
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,在老师创办的公司里实习,担任科研助理,并完成毕业设计(先画个饼,后续可能会换成英飞凌或者恩智浦等车规级芯片噢)。

        由于技术水平有限,希望大家多多指教,并给予包容和理解。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐