————————————————————————————————————
? 大家好哇!我是小光,嵌入式愛(ài)好者,一個(gè)想要成為系統(tǒng)架構(gòu)師的大三學(xué)生。
?最近在開(kāi)發(fā)一個(gè)STM32H723ZGT6的板子,使用STM32CUBEMX做了很多驅(qū)動(dòng),包括ADC、UART、RS485、EEPROM(IIC)、FLASH(SPI)等等。
?本篇文章對(duì)STM32CUBEMX配置STM32CUBEMX配置 定時(shí)器中斷 和 上升沿中斷以實(shí)現(xiàn)檢測(cè)1s以?xún)?nèi)的脈沖個(gè)數(shù)做一個(gè)詳細(xì)的教程。
?感謝你的閱讀,不對(duì)的地方歡迎指正。
————————————————————————————————————
MX配置上升沿檢測(cè)
我這里配置PA3為GPIO中斷模式
配置PA3為上升沿中斷,下拉
配置中斷優(yōu)先級(jí)
MX配置定時(shí)器中斷
1.定時(shí)器配置
我們板子的時(shí)鐘是550MHZ,分給TIM2的時(shí)鐘是275MHZ,所以我配的PSC是27500-1,ARR=10000-1.
定時(shí)的時(shí)間T=2750010000/(55010^6)=1s,也就是1s中斷一次
2.中斷配置
中斷優(yōu)先級(jí)配置
驅(qū)動(dòng)編寫(xiě)
上升沿中斷
加在main.c和it.c都行
unsigned int Nums_Rising = 0;//脈沖個(gè)數(shù)
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if(GPIO_Pin == GPIO_PIN_3)
{
// GPIO_PinState pinState = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_3);
Nums_Rising++;
__HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin);
}
}
定時(shí)器中斷
main.c添加
extern unsigned int Nums_Rising;//1s內(nèi)脈沖個(gè)數(shù)
/******************************************************************************
* @ 函數(shù)名 : HAL_TIM_PeriodElapsedCallback
* @ 功 能 : 定時(shí)器超時(shí)中斷回調(diào)函數(shù)
* @ 參 數(shù) : htim 定時(shí)器名
* @ 返回值 : 無(wú)
******************************************************************************/
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
static unsigned int i = -1,nums_pulse[10],counts = 0;
static double sums = 0.0;
double aver_pulse = 0.0;
if(htim->Instance == TIM2)
{
if(counts < 10)counts++;
else sums -= nums_pulse[i];
sums += Nums_Rising;
nums_pulse[i] = Nums_Rising;
aver_pulse = sums / (counts * 1.0);
printf("Counts_Rate = %.2f Hz\r\n",aver_pulse);//打印脈沖個(gè)數(shù)
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_10); //對(duì)PB5進(jìn)行翻轉(zhuǎn)
Nums_Rising = 0;
i = (i + 1) % 10;
}
}
順便還實(shí)現(xiàn)了一個(gè)滑動(dòng)窗口濾波。
最后能測(cè)量脈沖的范圍是0.1hz~4Mhz,在這個(gè)范圍誤差小于1%。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-605268.html
參考
STM32CubeMX——定時(shí)器輸入捕獲文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-605268.html
到了這里,關(guān)于STM32CUBEMX配置 定時(shí)器中斷 和 上升沿中斷(實(shí)現(xiàn)檢測(cè)1s以?xún)?nèi)的脈沖個(gè)數(shù))的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!