标题: STM32F407跑马灯实验 [打印本页]

作者: h00000    时间: 2020-5-26 15:30
标题: STM32F407跑马灯实验
跑马灯实验
一、实验目的与要求

1、熟悉GPIO的使用方法,熟悉HAL固件库中GPIO库函数的使用方法

2、熟悉Timer2的使用方法,熟悉HAL固件库中通用定时器(TIM) 库函数的使用方法

3、熟悉嵌套向量中断控制器(NVIC),熟悉STM32固件库中NVIC库函数的使用方法,进一步熟悉中断程序编写

二、实验设备

SUN ESMC01实验仪(含STM32F407模块)一套、ARM仿真器一套、PC机一台

三、实验内容

1、编写程序:控制STM32F407核心板上的4个指示灯DS1~DS4,,循环点亮,瞬间只有一个灯亮,使用Timer2产生延时。

2、观察实验结果,验证程序是否正确。

基于延时

while (1)

  {     

        //LED1 turned on, LED4 turned off

        HAL_GPIO_WritePin(GPIOC,GPIO_PIN_0, GPIO_PIN_SET);

        HAL_Delay(1000);  

        HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0,GPIO_PIN_RESET);               

        // LED2 turned on, LED1 turned off

        HAL_GPIO_WritePin(GPIOC,GPIO_PIN_1, GPIO_PIN_SET);

        HAL_Delay(1000);

        HAL_GPIO_WritePin(GPIOC, GPIO_PIN_1, GPIO_PIN_RESET);

        // LED3 turned on, LED2 turned off

        HAL_GPIO_WritePin(GPIOC, GPIO_PIN_2,GPIO_PIN_SET);

        HAL_Delay(1000);

        HAL_GPIO_WritePin(GPIOC, GPIO_PIN_2,GPIO_PIN_RESET);              

        // LD4 turned on, LD3 turned off

        HAL_GPIO_WritePin(GPIOC, GPIO_PIN_3,GPIO_PIN_SET);

        HAL_Delay(1000);

        HAL_GPIO_WritePin(GPIOC, GPIO_PIN_3,GPIO_PIN_RESET);              



  }

基于计时器

intmain(void)

{

  int   t= 0;

  lighton = 0;              //500mssign

  HAL_Init();

  SystemClock_Config();

  MX_GPIO_Init();

  MX_TIM2_Init();

  __HAL_TIM_CLEAR_IT(&htim2,TIM_IT_UPDATE);//清除中断

  HAL_TIM_Base_Start_IT(&htim2) ;           //启动时钟

  while (1)

  {

        if (lighton)

    {

        lighton = 0;                       //500ms sign

        switch(t)

        {

        case 0:

          HAL_GPIO_WritePin(GPIOC,GPIO_PIN_3, GPIO_PIN_RESET);     //LED4off

          HAL_GPIO_WritePin(GPIOC,GPIO_PIN_0, GPIO_PIN_SET);      //LED1 on

          break;

        case 1:

          HAL_GPIO_WritePin(GPIOC,GPIO_PIN_0, GPIO_PIN_RESET);     //LED1off

          HAL_GPIO_WritePin(GPIOC,GPIO_PIN_1, GPIO_PIN_SET);      //LED2 on

          break;

        case 2:

          HAL_GPIO_WritePin(GPIOC,GPIO_PIN_1, GPIO_PIN_RESET);     //LED2off

          HAL_GPIO_WritePin(GPIOC,GPIO_PIN_2, GPIO_PIN_SET);       //LED3 on

          break;

        case 3:

          HAL_GPIO_WritePin(GPIOC,GPIO_PIN_2, GPIO_PIN_RESET);     //LED3off

          HAL_GPIO_WritePin(GPIOC,GPIO_PIN_3, GPIO_PIN_SET);       //LED4 on

          break;

        }

        t++;

        t &= 0x3;

    }

  }

}



voidHAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)

{

    if (htim == &htim2)

    {

        lighton = 1;

    }








欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1