跑馬燈實驗
一、實驗目的與要求
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;
}
|