![]() |
發布時間: 2021-9-23 10:52
正文摘要:這是我寫的一個PID輸出PWM控制溫度的程序 但是為什么程序始終進不去算法函數 是不是定時器2和定時器3的中斷有沖突 麻煩大佬幫我看下 程序在User里面 |
串口打印變量值分析下 |
這個可以明確PB5你可進行TIM3的引腳重映射。重映射后的操作參考如下: GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimBaseStructure; TIM_ICInitTypeDef TIM_ICInitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3 ,ENABLE ); //重映射相應的外設 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOB, &GPIO_InitStructure); TIM_TimeBaseStructInit(&TIM_TimBaseStructure); TIM_TimBaseStructure.TIM_Prescaler = 0x0; TIM_TimBaseStructure.TIM_Period = 2400; TIM_TimBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM3,&TIM_TimBaseStructure); TIM_EncoderInterfaceConfig(TIM3,TIM_EncoderMode_TI12,TIM_ICPolarity_Rising,TIM_ICPolarity_Rising); TIM_ICStructInit(&TIM_ICInitStructure); TIM_ICInitStructure.TIM_ICFilter = 0; TIM_ICInit(TIM3,&TIM_ICInitStructure); TIM_ClearFlag(TIM3,TIM_FLAG_Update); TIM_SetCounter(TIM3,0); TIM_Cmd(TIM3,ENABLE); |
51hei截圖_20210924084044.jpg (16.03 KB, 下載次數: 91)
shumivan 發表于 2021-9-23 16:59 TIM3的CH2通道部分映射對應管腳PB5,有PWM輸出 |
記。河肋h不要在中斷服務程序中,執行占用時間長的函數! 中斷只做標記,在主函數中,根據標記執行相關的程序,完成后清除標記。 |
定義的時候重映射,而且我覺得要定時器3全部映射,你現在是部分映射,怕是PWM的功能沒有啟用 |
TIM_GetFlagStatus的返回值有什么含意? 既然你的函數都已經放在中斷中 直接運行if(st!=0)內的東東就好了 為什么還要判斷st的值? |
本帖最后由 shumivan 于 2021-9-24 08:36 編輯 你這也沒有定時器3的相關信息 阿,只有定時器2的信息,無法判。補充,剛開始沒看清楚,下邊有我的觀點 |
這個是源程序 |
212.19 KB, 下載次數: 6