找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1711|回复: 0
打印 上一主题 下一主题
收起左侧

STM32F407跑马灯实验

[复制链接]
跳转到指定楼层
楼主
ID:761160 发表于 2020-5-26 15:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
跑马灯实验
一、实验目的与要求

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;

    }



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表