赞
踩
void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);
参数1:GPIOx,端口号,如:GPIOB,GPIOF。
参数2:GPIO_Pin,引脚号,如:GPIO_PIN_9,GPIO_PIN_12。
参数3:PinState,引脚输出状态。高电平----GPIO_PIN_SET;低电平----GPIO_PIN_RESET。
返回值:void,空。
应用举例:向PB5引脚输入高电平
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_SET);
2.GPIO电平翻转HAL库函数
void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
参数1:GPIOx,端口号,如:GPIOB,GPIOF。
参数2:GPIO_Pin,引脚号,如:GPIO_PIN_9,GPIO_PIN_12。
返回值:void,空。
应用举例:将PA3引脚输出电平翻转
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_3);
3.GPIO初始化函数源码剖析
void MX_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct = {0}; /* GPIO端口时钟使能 */ __HAL_RCC_GPIOC_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); /*配置GPIO端口引脚的初始化输出电平 ,引脚为PB8,PB9,输出电平为低电平*/ HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8|GPIO_PIN_9, GPIO_PIN_RESET); /*配置GPIO端口输入引脚 : PC13 */ GPIO_InitStruct.Pin = GPIO_PIN_13; //GPIO端口的引脚号是:13 GPIO_InitStruct.Mode = GPIO_MODE_INPUT; //GPIO的模式是:输入 GPIO_InitStruct.Pull = GPIO_NOPULL; //没有上拉 HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); //将参数结构设置到GPIOC端口 /*配置GPIO端口输出引脚 : PB8 PB9 */ GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9; //GPIO端口的引脚号是:8和9 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; //GPIO的模式是:输出 GPIO_InitStruct.Pull = GPIO_NOPULL; //没有上拉 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; //GPIO的输出速度是:非常低速 HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); //将参数结构设置到GPIOB端口 }
第一部分:根据开发板原理图,配置STM32CubeMX
1.开发板LED灯部分原理图如图所示:
由原理图不难看出,LED0的阴极与PB5引脚直接相连,LED1的阴极与PE5引脚直接相连,控制时,引脚为低电平,对应LED灯发光;引脚为高电平。对应LED灯熄灭。
2.配置STM32CubeMX
(1)实验中使用开发板通过STLink连接电脑仿真,Debug模式要选择SW模式,如果使用JTAG连接,对应连接方式选择JTAG。否则一会在Keil5中下载的时候,会提示找不到设备。
(2)时钟配置:如果需要使用外部晶振,需要再System Core菜单里选择RCC,将时钟源选择成为外部晶振
(3)观察时钟树,调节时钟频率:点击上方的Clock Configuration,在其中可以调节时钟频率,如果频率超过最大频率,会标记为红色
(4)引脚配置:在STM32CubeMX的引脚图中,分别点击PB5和PE5两个引脚,由于STM32的芯片为引脚复用,在IO控制中,选择其模式为Output模式
随后可在左侧的GPIO菜单中看见这两个引脚,可以单击Modified进行设置,注意:勾选Modified才可以启用引脚
(5)导出项目,在Project Manager选项卡中设置导出的内容,包括项目位置与名称,和开发环境等,我用的是Keil5开发的,所以IDE需要选择MDF-ARM,最低支持版本为V5即可。
需要注意的是,左侧Code Generator选型卡中,第二块,第一条,Generate peripheral initialization as a pair of ‘.c/.h’ files per peripheral项需要选中。
以上内容设置好后,点右上角GENERATE CODE按钮导出即可,随后可进入Keil5项目中,进行代码的编写。
第二部分:Keil5中代码的编写
在Keil5中,可以发现,STM32CubeMX导出的项目中,结构清晰,并且留出了用户代码书写区域,用户需要将代码写入到书写区域中,这样如果后续开发需要再配置内容的时候,重新导出后,书写区的代码不会被清空;如果写入到非指定区域,代码会被清空。
本次练习为对IO口的控制,需要保证其持续运行,因此需要写到while(1)死循环中:
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_5); //实现PB5引脚电平的翻转
HAL_Delay(500); //延时500ms
HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_5); //实现PB5引脚电平的翻转
// HAL_Delay(500); //延时500ms,实现流水灯时,不需要对此行注释进行任何操作;如果实现跑马灯,清除掉此处注释标记即可
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
写完代码后,在Keil5里编译好后,就可以下载到单片机中。
对应源码:利用STM32F103ZET6开发板基于HAL库的STM32学习笔记一:GPIO开发基础例程
以上内容为本人学习b站小蜜蜂老师的基于STM32CubeMX的嵌入式开发基础教程所做的笔记,其中有一些为个人的理解与感悟,如有疏漏之处,敬请大佬指正。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。