MCU:STM32F103ZET6
IDE: MDK-ARM V5 +STM32CubeMX5.0.0
根据MCU的硬件原理图可以看出LED均是低电平触发,且对应的端口为PC0-PC7,因此在使能是应开启GPIOC端口。
在MCU管脚图中找到PC0-PC7管脚,右键将管脚设置为GPIO_Output输出模式。
此时在System Core的GPIO中,会出现对应端口,点击端口将GPIO output level设置为low,将User Label定义为LED。
1.设置项目的名称以及保存的位置,选择Toolchain/IDE为MDK-ARM V5,
Tips:最好把Linker Settings中的Minimum Heap Size设置为0x600。
2.在Code Generator选项中如下勾选:
最后点Generate Code生成代码,并选择“Open Project”:
首先进入main.h,其中已经对管脚端口进行了宏定义(对应User_Label的内容):
#define LED1_Pin GPIO_PIN_0
#define LED1_GPIO_Port GPIOC
在gpio.c中进行了对GPIO的初始化:贴出核心代码与备注
void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
HAL_GPIO_WritePin(GPIOC, LED1_Pin|LED2_Pin|LED3_Pin|LED4_Pin
|LED5_Pin|LED6_Pin|LED7_Pin|LED8_Pin, GPIO_PIN_RESET);
GPIO_InitStruct.Pin = LED1_Pin|LED2_Pin|LED3_Pin|LED4_Pin
|LED5_Pin|LED6_Pin|LED7_Pin|LED8_Pin; //选择对应的LED管脚
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; //输出模式
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; //输出速度
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
打开main.c,在while(1)中编写主函数,要实现LED灯亮与灭可以通过调用HAL_GPIO_TogglePin函数与HAL_Delay函数。
void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
这个函数用来翻转某个引脚的电平状态,可用以实现LED的闪烁。
__weak void HAL_Delay(uint32_t Delay)
是毫秒级的延时函数。
关于HAL库中GPIO的函数介绍:HAL库中GPIO函数介绍。
主程序如下:
while (1)
{
/* USER CODE END WHILE */
HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);
HAL_Delay(500);//毫秒级延迟
HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);
HAL_Delay(500);
HAL_GPIO_TogglePin(LED3_GPIO_Port,LED3_Pin);
HAL_Delay(500);
HAL_GPIO_TogglePin(LED4_GPIO_Port,LED4_Pin);
HAL_Delay(500);
HAL_GPIO_TogglePin(LED5_GPIO_Port,LED5_Pin);
HAL_Delay(500);
HAL_GPIO_TogglePin(LED6_GPIO_Port,LED6_Pin);
HAL_Delay(500);
HAL_GPIO_TogglePin(LED7_GPIO_Port,LED7_Pin);
HAL_Delay(500);
HAL_GPIO_TogglePin(LED8_GPIO_Port,LED8_Pin);
HAL_Delay(500);
/* USER CODE BEGIN 3 */
}
至此,编译后无错并下载到开发板中,就完成了通过STM32CubeMX调用HAL库实现流水灯的效果程序。