STM32F103用Cube和HAL库构建Systick
本帖最后由 mil234 于 2021-12-11 20:21 编辑
STM32F103用Cube和HAL库构建Systick作者:雾里白马啸西风日期:2021年12月10日星期五
1. 先上用CubeMx设计的时钟配置图
我的开发板带8M外接晶振,因此我选HSE,经过PLL倍频。选择8倍频,因为后续做边沿捕获时,计算时间的话,需要除以8M*8倍频,可以直接移位。这样配置得到时钟:1) SysClk:64MHz,系统频率2) HCLK:65MHz,提供给高速总线AHB的时钟信号3) PCLK:提供给低速总线APB的时钟信号a) PClk1:32MHz,而和APB1连接的TIM2~TIM7的时钟是64MHzb) PClk2:32MHz,而和APB2连接的TIM1和TIM8的时钟是64MHz4) FClk:64MHz,提供给CPU内核的时钟信号
2. 在CubeMx设置GPIO以点亮LED先上图,再说明
我的开发板是PB14和PB15连接了2颗LED,因此也就选择这2个管脚。配置成推挽输出即可,其他默认。
3. 在CubeMx项目管理中设置
我用的是KEIL 5,因此选择MDK-ARM V5.在代码生成器设置时,如下,我选择只拷贝必需的库文件,并且单独生成外围部件文件。
4. 点击生成代码按钮,生成后,打开“Open Project”,进入Keil环境。
5. 在Keil环境里面
选择打开gpio.h文件,输入定义LED的define
/* USER CODE BEGIN Private defines */#define ON 0#define OFF 1
#define LED1(a)if (a) \ HAL_GPIO_WritePin(GPIOB,GPIO_PIN_14, GPIO_PIN_SET);\ else \ HAL_GPIO_WritePin(GPIOB,GPIO_PIN_14, GPIO_PIN_RESET)
#define LED2(a)if (a) \ HAL_GPIO_WritePin(GPIOB,GPIO_PIN_15, GPIO_PIN_SET);\ else \ HAL_GPIO_WritePin(GPIOB,GPIO_PIN_15, GPIO_PIN_RESET)/* USER CODE END Private defines */
6. 打开main.c文件,在while(1)主循环里面添加以下内容
/* USER CODE BEGIN WHILE */while (1){ /* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
LED1( ON ); LED2( OFF ); HAL_Delay(1000); // 1000 * 1ms = 1s LED1( OFF ); LED2( ON ); HAL_Delay(1000);
}/* USER CODE END 3 */调用Systick延迟函数HAL_Delay,这个函数是以ms为间隔的延迟函数。
7. 编译通过,烧写开发板,两个LED交叉闪烁。用Systick做延迟的实例完成。
页:
[1]