目的:嘗試設計一個簡單的中斷服務程序,該程序在其中使用一個函數指針,以便可以從main()函數中可以依需求調用不同函數以下為程式內容
/**********************************/
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "key.h"
#include "timer.h"
void (*isr)(void) ;//聲明一個函數指針變量
void Fun(void){
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_0);
}//預計調用的函數
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim==(&TIM3_Handler))
{
isr();//調用函數指針
}
}
//中斷服務函數之內容
int main(void)
{
HAL_Init(); //初始化HAL库
Stm32_Clock_Init(360,25,2,8); //设置时钟,180Mhz
delay_init(180); //初始化延时函数
uart_init(115200); //初始化USART
LED_Init(); //初始化LED
KEY_Init(); //初始化按键
delay_ms(500);
TIM3_Init(5000-1,9000-1); //定时器3初始化,定时器时钟为90M,分频系数为9000-1,
//所以定时器3的频率为90M/9000=10K,自动重装载为5000-1,那么定时器周期就是500ms
isr=Fun;//預計調用的函數賦值給isr指針
while(1)
{
}
}
/**************************************
目前問題:
若在中斷服務函數中直接調用Fun()。程式可運行
在main函數當中調用指針函數isr()也可運行
然而在中斷服務函數裡面調用isr()卻無運作
是否中斷服務函數調用指針函數有其他限制?
懇請各位先進提點
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>