打印
[ARM入门]

STM32F103用Cube和HAL库构建Systick

[复制链接]
1423|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 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的时钟是64MHz
b)       PClk2:32MHz,而和APB2连接的TIM1和TIM8的时钟是64MHz
4)     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做延迟的实例完成。









使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

211

主题

1124

帖子

9

粉丝