STM32103fx使用定時器TIM3實現燈一秒亮一次
使用keil代碼編譯沒問題,但是在proteus仿真上,燈是一直亮的狀態,不進行定時器中斷。改了很多次,不知道為啥,求助。代碼如下
- void TIM3_Config(void)
- {
- /*1表示亮燈 0表示不亮*/
- /* TIM_TimeBaseInitTypeDef結構體在stm32f10x_tim.h中定義 */
- TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
- TIM_DeInit(TIM3);
- /* 計數10000次 */
- TIM_TimeBaseStructure.TIM_Period = (10000-1);
- /* 預分頻系數,7200,因為系統時鐘72MHZ */
- TIM_TimeBaseStructure.TIM_Prescaler = 71;
- TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
- //TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
- TIM_TimeBaseStructure.TIM_ClockDivision = 0;
- /* 根據設定的參數設置TIM1 */
- TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
- TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
- TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);//使能或者失能指定的TIM中斷TIM3,
- TIM_Cmd(TIM3, ENABLE);
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, DISABLE);
- }
- void GPIO_Config(void)
- {
- /* 定義GPIO_InitTypeDef結構體,在stm32f10x_gpio.h中定義 */
- GPIO_InitTypeDef GPIO_InitStructure;
- /* 使能 */
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
- GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /*驅動LED*/
- GPIO_Init(GPIOA, &GPIO_InitStructure);
- }
- void NVIC_Config(void){
- NVIC_InitTypeDef NVIC_InitStructure;
- // 設置中斷組為0
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
- // 設置中斷來源
- NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn ;
- // 設置主優先級為 0
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
- // 設置搶占優先級為3
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
- }
復制代碼 仿真如下圖:
1.png (18.33 KB, 下載次數: 33)
下載附件
2023-5-11 05:25 上傳
燈一直保持亮的狀態,并不會一亮一滅,覺得是不是中斷有問題,但查了挺多資料,還是不行。
|