潜力变实力 发表于 2022-1-12 17:58

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]
查看完整版本: STM32F103用Cube和HAL库构建Systick