跑马灯实验
一、实验目的与要求
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;
}
|