基于STM32Cubemx的STM32f107vct6代码生成教程,实验二GPIO跑马灯及外部外部中断

STM32f107VC基于STM32cubemx代码生成实验二:GPIO输出跑马灯(1)及定时器中断(2)
软件环境:STM32CUBEMX/System Workbench/MDK keil5

  1. 在STM32cubemx中建立新的project,按照之前操作选择正确的MCU。
    基于STM32Cubemx的STM32f107vct6代码生成教程,实验二GPIO跑马灯及外部外部中断_第1张图片

  2. 首先设置RCC和SYS和TIME1选择内部时钟(Internal Clock)配置如下。
    基于STM32Cubemx的STM32f107vct6代码生成教程,实验二GPIO跑马灯及外部外部中断_第2张图片

  3. 根据板子情况设置时钟树(此处外部晶振是12M,STM32f107最高主频为72M)。

  4. (1)GPIO设置PD7,PD13,PD3,PD4为GPIO_OUPUT(此处为使用的实验箱四个LED管)。并更改名称为LED1.2.3.4
    基于STM32Cubemx的STM32f107vct6代码生成教程,实验二GPIO跑马灯及外部外部中断_第3张图片

  5. 在Configuration中设置GPIO,输出均为High。
    基于STM32Cubemx的STM32f107vct6代码生成教程,实验二GPIO跑马灯及外部外部中断_第4张图片

  6. 在Project—setting中Toolchain/IDE选择所需要的编译软件,keil5/SW4STM32,勾选下图选项。
    基于STM32Cubemx的STM32f107vct6代码生成教程,实验二GPIO跑马灯及外部外部中断_第5张图片
    保存之后,点击任务栏的代码生成图标。
    完成之后点击Open Project,自动打开项目,双击编辑main.c在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);
    基于STM32Cubemx的STM32f107vct6代码生成教程,实验二GPIO跑马灯及外部外部中断_第6张图片

定时器中断(2)
1.GPIO设置PD7 PD13为GPIO_OUPUT(实验箱四个LED管脚中的两个),改名为LED1,LED2.
基于STM32Cubemx的STM32f107vct6代码生成教程,实验二GPIO跑马灯及外部外部中断_第7张图片

2.设置RCC和SYS。
基于STM32Cubemx的STM32f107vct6代码生成教程,实验二GPIO跑马灯及外部外部中断_第8张图片
启用TIM1,选择内部时钟(Internal Clock)。
2.在Configuration,中设置其中一个默认为高电平,另一个默认为低电平,User Label分别是LED1和LED2。
基于STM32Cubemx的STM32f107vct6代码生成教程,实验二GPIO跑马灯及外部外部中断_第9张图片
3.设置TIM1,启用中断
基于STM32Cubemx的STM32f107vct6代码生成教程,实验二GPIO跑马灯及外部外部中断_第10张图片

  1. 由于TIM1是挂在APB2总线上,查看时钟树我们知道APB2当前频率为72MHz,我们希望每秒钟发生2次中断,就把预分频系数设置为36000-1,自动重载值为1000-1,得到的计时器更新中断频率即为72,000,000/36000/1000=2Hz。
    基于STM32Cubemx的STM32f107vct6代码生成教程,实验二GPIO跑马灯及外部外部中断_第11张图片
    4.在Project—setting中Toolchain/IDE选择所需要的编译软件,keil5/SW4STM32,勾选下图选项。
    基于STM32Cubemx的STM32f107vct6代码生成教程,实验二GPIO跑马灯及外部外部中断_第12张图片
    保存之后,点击任务栏的代码生成图标。
    5.完成之后点击Open Project,自动打开项目,双击编辑main,在while(1)之前启用TIM1并使其能中断
    HAL_TIM_Base_Start_IT(&htim1);
    基于STM32Cubemx的STM32f107vct6代码生成教程,实验二GPIO跑马灯及外部外部中断_第13张图片
    6.添加如下代码(注意此回调函数默认是__weak定义的,所以我们在这里需要重新定义一下,而且此回调函数是所有定时器共用的,所以我们需要先通过if (htim->Instance == htim1.Instance)判断它是哪个定时器中断在调用)
    /* USER CODE BEGIN 4 */
    void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef htim)
    {
    if (htim->Instance == htim1.Instance)
    {
    /
    Toggle LED /
    HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);
    HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);
    }
    }
    /
    USER CODE END 4 */
    基于STM32Cubemx的STM32f107vct6代码生成教程,实验二GPIO跑马灯及外部外部中断_第14张图片
  2. 程序下载,打开已安装好的J-link驱动J-Link Commander,打开所要下载的工程,先进行编译,然后配置软件。
    基于STM32Cubemx的STM32f107vct6代码生成教程,实验二GPIO跑马灯及外部外部中断_第15张图片
    8.点击“魔法棒”,或project-options for target‘name’出现如下窗口。
    基于STM32Cubemx的STM32f107vct6代码生成教程,实验二GPIO跑马灯及外部外部中断_第16张图片
    选择debug,如图选择use内容,因使用J-link故此处选择相应的选项,然后点击settings进行配置,设置为SW模式。
    基于STM32Cubemx的STM32f107vct6代码生成教程,实验二GPIO跑马灯及外部外部中断_第17张图片
    基于STM32Cubemx的STM32f107vct6代码生成教程,实验二GPIO跑马灯及外部外部中断_第18张图片
    9.设置Flash,点击flash download,进入如下界面然后勾选Rest and Run,点击Add添加所需型号
    基于STM32Cubemx的STM32f107vct6代码生成教程,实验二GPIO跑马灯及外部外部中断_第19张图片
    10.点击Utilites,在settings中查看是否为SW模式,flash download与之前debug设置相同,之后点击ok完成设置,点击load下载程序。

你可能感兴趣的:(stm32cubemx,代码生成,stm32f107,跑马灯)