设置时钟
配置时钟树,我的外部晶振是8M的,其他的晶振根据硬件设置
HAL时钟使用TIM1,否则若使用SysTick,这在生成代码的时候会提示与Freertos时钟有冲突。选择Serial Wire烧写模式。
添加Freertos
在任务重添加TASK_LED任务。
设置LED引脚
根据电路图,对PA8需要设置成输出模式,上拉输出高电平并增强输出电流。
生成的初始化代码如下
void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
/* GPIO Ports Clock Enable */
__HAL_RCC_GPIOC_CLK_ENABLE();
__HAL_RCC_GPIOH_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_SET);//设置引脚电平,初始化为高电平
/*Configure GPIO pin : PA8 */
GPIO_InitStruct.Pin = GPIO_PIN_8;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}
LED闪烁任务
void StartTask_LED(void const * argument)
{
/* USER CODE BEGIN StartTask_LED */
/* Infinite loop */
for(;;)
{
//osDelay(1);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_SET);
osDelay(1000);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_RESET);
osDelay(1000);//开始忘记写这行代码,让我以为Freertos没有起起来,排bug找了一大圈,蠢哭
}
/* USER CODE END StartTask_LED */
}