本文來(lái)源電子發(fā)燒友社區(qū),作者:Michael, 帖子地址:https://bbs.elecfans.com/jishu_2287621_1_1.html
Air105 的timer
定時(shí)器
PWM
定時(shí)器相關(guān)代碼
以下代碼基于 air105_projecthttps://gitee.com/iosetting/air105_project的庫(kù)函數(shù)
定時(shí)器模塊結(jié)構(gòu)
在Air105中, 全局只有一個(gè)定時(shí)器模塊, TIMM0
復(fù)制代碼
這個(gè) TIMM0 的地址定義在 air105.h 中
復(fù)制代碼
地址 = 0x40000000UL + 0x10000 + 0x3000 = 0x4001 3000
范圍 [0x4001_3000, 0x4001_3FFF]
定時(shí)器初始化
定時(shí)器的初始化只需要兩個(gè)參數(shù): TIMx, 周期(時(shí)鐘數(shù)), 為配合定時(shí)器使用, 還需要定義中斷
復(fù)制代碼
定時(shí)器中斷處理
Air105對(duì)應(yīng)每個(gè)定時(shí)器, 各有一個(gè)中斷處理函數(shù), 可以查看 startup.air105.s 中的中斷向量定義
復(fù)制代碼
對(duì)應(yīng) Timer0 的中斷處理, 寫在 air105_it.c. TIM_ClearITPendingBit 和 NVIC_ClearPendingIRQ 是必須調(diào)用的, 用于清除中斷
復(fù)制代碼
下面加入處理邏輯的例子, 每秒調(diào)用一次 timer_handler(), 注意不要在中斷處理中使用耗時(shí)的工作
復(fù)制代碼
定時(shí)器示例代碼
使用Timer0控制板載LED每隔一秒閃爍
https://gitee.com/iosetting/air105_project/tree/master/Demos/Timer/Timer_Blink
Air105 的 PWM
Air105 的8個(gè)獨(dú)立定時(shí)器均可編程產(chǎn)生PWM信號(hào). 當(dāng)用戶設(shè)定TimerNControlReg中PWM比特位為1后,定時(shí)器進(jìn)入PWM工作模式. 此時(shí) PWM 由 TimerNLoadCount2 和 TimerNLoadCount 寄存器分別控制高電平及低電平周期翻轉(zhuǎn)輸出.
頻率和占空比設(shè)置
高電平周期 = (TimerNLoadCount2 + 1) * PCLK_Period
低電平周期 = (TimerNLoadCount + 1) * PCLK_Period
PWM 相關(guān)代碼
PWM初始化也只需要三個(gè)參數(shù) TIMx 和高低電平兩個(gè)周期, 兩者之和就是一個(gè)PWM周期
復(fù)制代碼
用Timer5初始化
復(fù)制代碼
將 PB5 功能復(fù)用為 PWM5
復(fù)制代碼
實(shí)時(shí)調(diào)節(jié)占空比, 后兩個(gè)參數(shù)代表PCLK時(shí)鐘周期個(gè)數(shù)
復(fù)制代碼
PWM示例代碼
使用PWM5(Timer5)控制LED產(chǎn)生呼吸燈效果
https://gitee.com/iosetting/air105_project/tree/master/Demos/PWM/PWM_FadeLED
示例接線:
根據(jù)開(kāi)發(fā)板的BOMPCB查看https://wiki.luatos.com/_static/bom/Air105.html
Timer5對(duì)應(yīng)的PWM5輸出, 對(duì)應(yīng)開(kāi)發(fā)板的SP2_MI, 開(kāi)發(fā)板上的PWM5對(duì)應(yīng)的是PC7, 要注意, 別接錯(cuò)了.
運(yùn)行示例, 將一個(gè)LED串接一個(gè)1-5K的電阻, 接在SP2_MI和GND之間, 就能看到呼吸燈的效果了。
Air105 的timer
定時(shí)器
- 1 個(gè) Timer 單元,包含 8 個(gè)獨(dú)立定時(shí)器: Timer0,Timer1,Timer2,Timer3,Timer4,Timer5,Timer6,Time7
- 8 個(gè)定時(shí)器中斷源獨(dú)立,每個(gè)定時(shí)器單獨(dú)占 1 個(gè)中斷源
- 使用 PCLK 時(shí)鐘頻率作為定時(shí)器計(jì)時(shí)鐘源
- 定時(shí)器采用向下計(jì)數(shù)方式
PWM
- 每個(gè) Timer 單元定時(shí)器都支持 PWM 模式
- PWM 模式最高頻率 PCLK/2
- PWM 單次觸發(fā)(one shot)功能
定時(shí)器相關(guān)代碼
以下代碼基于 air105_projecthttps://gitee.com/iosetting/air105_project的庫(kù)函數(shù)
定時(shí)器模塊結(jié)構(gòu)
在Air105中, 全局只有一個(gè)定時(shí)器模塊, TIMM0
- typedef struct
- {
- TIM_TypeDef TIM[TIM_NUM];
- __Iuint32_t TIM_IntStatus;
- __Iuint32_t TIM_EOI;
- __Iuint32_t TIM_RawIntStatus;
- __Iuint32_t TIM_Comp;
- __IO uint32_t TIM_ReloadCount[TIM_NUM];
- } TIM_Module_TypeDef;
這個(gè) TIMM0 的地址定義在 air105.h 中
- #define TIMM0 ((TIM_Module_TypeDef *)TIMM0_BASE)
- #define AIR105_PERIPH_BASE (0x40000000UL) /*!< (Peripheral) Base Address */
- #define AIR105_APB0_BASE (AIR105_PERIPH_BASE + 0x10000)
- #define TIMM0_BASE (AIR105_APB0_BASE + 0x3000)
地址 = 0x40000000UL + 0x10000 + 0x3000 = 0x4001 3000
范圍 [0x4001_3000, 0x4001_3FFF]
定時(shí)器初始化
定時(shí)器的初始化只需要兩個(gè)參數(shù): TIMx, 周期(時(shí)鐘數(shù)), 為配合定時(shí)器使用, 還需要定義中斷
- void Timer_Init(void)
- {
- TIM_InitTypeDef TIM_InitStruct;
- NVIC_InitTypeDef NVIC_InitStructure;
- // 開(kāi)啟定時(shí)器的外設(shè)時(shí)鐘
- SYSCTRL_APBPeriphClockCmd(SYSCTRL_APBPeriph_TIMM0, ENABLE);
- SYSCTRL_APBPeriphResetCmd(SYSCTRL_APBPeriph_TIMM0, ENABLE);
- // 定時(shí)器的時(shí)鐘是 PCLK, 計(jì)數(shù)間隔為 1ms 對(duì)應(yīng)的時(shí)鐘數(shù)
- TIM_InitStruct.TIM_Period = SYSCTRL->PCLK_1MS_VAL;
- // 使用 定時(shí)器0
- TIM_InitStruct.TIMx = TIM_0;
- // 初始化
- TIM_Init(TIMM0, &TIM_InitStruct);
- // 開(kāi)啟定時(shí)器0的中斷
- TIM_ITConfig(TIMM0, TIM_InitStruct.TIMx, ENABLE);
- //NVIC
- NVIC_SetPriorityGrouping(NVIC_PriorityGroup_0);
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_InitStructure.NVIC_IRQChannel = TIM0_0_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
- NVIC_Init(&NVIC_InitStructure);
- // 啟動(dòng)定時(shí)器0
- TIM_Cmd(TIMM0, (TIM_NumTypeDef)TIM_0, ENABLE);
- }
定時(shí)器中斷處理
Air105對(duì)應(yīng)每個(gè)定時(shí)器, 各有一個(gè)中斷處理函數(shù), 可以查看 startup.air105.s 中的中斷向量定義
- TIM0_0_IRQHandler
- TIM0_1_IRQHandler
- TIM0_2_IRQHandler
- TIM0_3_IRQHandler
- TIM0_4_IRQHandler
- TIM0_5_IRQHandler
- TIM0_6_IRQHandler
- TIM0_7_IRQHandler
對(duì)應(yīng) Timer0 的中斷處理, 寫在 air105_it.c. TIM_ClearITPendingBit 和 NVIC_ClearPendingIRQ 是必須調(diào)用的, 用于清除中斷
- void TIM0_0_IRQHandler(void)
- {
- TIM_ClearITPendingBit(TIMM0, TIM_0);
- NVIC_ClearPendingIRQ(TIM0_0_IRQn);
- }
下面加入處理邏輯的例子, 每秒調(diào)用一次 timer_handler(), 注意不要在中斷處理中使用耗時(shí)的工作
- extern uint32_t timer_count;
- extern void timer_handler(void);
- void TIM0_0_IRQHandler(void)
- {
- timer_count++;
- if (timer_count >= 1000)
- {
- timer_count = 0;
- timer_handler();
- }
- TIM_ClearITPendingBit(TIMM0, TIM_0);
- NVIC_ClearPendingIRQ(TIM0_0_IRQn);
- }
定時(shí)器示例代碼
使用Timer0控制板載LED每隔一秒閃爍
https://gitee.com/iosetting/air105_project/tree/master/Demos/Timer/Timer_Blink
Air105 的 PWM
Air105 的8個(gè)獨(dú)立定時(shí)器均可編程產(chǎn)生PWM信號(hào). 當(dāng)用戶設(shè)定TimerNControlReg中PWM比特位為1后,定時(shí)器進(jìn)入PWM工作模式. 此時(shí) PWM 由 TimerNLoadCount2 和 TimerNLoadCount 寄存器分別控制高電平及低電平周期翻轉(zhuǎn)輸出.
頻率和占空比設(shè)置
高電平周期 = (TimerNLoadCount2 + 1) * PCLK_Period
低電平周期 = (TimerNLoadCount + 1) * PCLK_Period
PWM 相關(guān)代碼
PWM初始化也只需要三個(gè)參數(shù) TIMx 和高低電平兩個(gè)周期, 兩者之和就是一個(gè)PWM周期
- typedef struct
- {
- TIM_NumTypeDef TIMx;
- uint32_t TIM_LowLevelPeriod;
- uint32_t TIM_HighLevelPeriod;
- }TIM_PWMInitTypeDef;
用Timer5初始化
- void TimerPWM_Init(void)
- {
- TIM_PWMInitTypeDef TIM_PWMInitStruct;
- SYSCTRL_APBPeriphClockCmd(SYSCTRL_APBPeriph_TIMM0, ENABLE);
- SYSCTRL_APBPeriphResetCmd(SYSCTRL_APBPeriph_TIMM0, ENABLE);
- //Timer5 -> PWM5
- TIM_PWMInitStruct.TIM_HighLevelPeriod = SYSCTRL->PCLK_1MS_VAL;
- TIM_PWMInitStruct.TIM_HighLevelPeriod = 0;
- TIM_PWMInitStruct.TIMx = TIM_5;
- TIM_PWMInit(TIMM0, &TIM_PWMInitStruct);
- TIM_Cmd(TIMM0, TIM_5, ENABLE);
- }
將 PB5 功能復(fù)用為 PWM5
- GPIO_InitTypeDef gpio;
- gpio.GPIO_Pin = GPIO_Pin_5;
- gpio.GPIO_Mode = GPIO_Mode_Out_PP;
- gpio.GPIO_Remap = GPIO_Remap_2;
- GPIO_Init(GPIOB, &gpio);
實(shí)時(shí)調(diào)節(jié)占空比, 后兩個(gè)參數(shù)代表PCLK時(shí)鐘周期個(gè)數(shù)
- TIM_SetPWMPeriod(TIMM0, TIM_5, period - high_period, high_period);
PWM示例代碼
使用PWM5(Timer5)控制LED產(chǎn)生呼吸燈效果
https://gitee.com/iosetting/air105_project/tree/master/Demos/PWM/PWM_FadeLED
示例接線:
根據(jù)開(kāi)發(fā)板的BOMPCB查看https://wiki.luatos.com/_static/bom/Air105.html
Timer5對(duì)應(yīng)的PWM5輸出, 對(duì)應(yīng)開(kāi)發(fā)板的SP2_MI, 開(kāi)發(fā)板上的PWM5對(duì)應(yīng)的是PC7, 要注意, 別接錯(cuò)了.
運(yùn)行示例, 將一個(gè)LED串接一個(gè)1-5K的電阻, 接在SP2_MI和GND之間, 就能看到呼吸燈的效果了。
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
-
合宙通信
+關(guān)注
關(guān)注
0文章
148瀏覽量
1842 -
Air105
+關(guān)注
關(guān)注
0文章
48瀏覽量
313
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
定時(shí)器已安排!開(kāi)發(fā)小白看過(guò)來(lái)~
本文將為您詳細(xì)介紹Air201定時(shí)器的基本操作與設(shè)置,確保您輕松上手,包教包會(huì)! 在Air201模組搭載的LuatOS系統(tǒng)中,定時(shí)器(timer)是一項(xiàng)基礎(chǔ)且關(guān)鍵的服務(wù)。 它允許
Air780E的心跳:定時(shí)器精確計(jì)時(shí)的科學(xué)與藝術(shù)
大家都知道定時(shí)器在多種應(yīng)用場(chǎng)景中都發(fā)揮著重要作用,如定時(shí)發(fā)送數(shù)據(jù)、周期性檢查傳感器狀態(tài)等,今天我以Air780E模組為例。
合宙低功耗4G模組AIR780EX ——開(kāi)發(fā)板使用說(shuō)明
EVB-AIR780EX 開(kāi)發(fā)板是合宙通信推出的基于 Air780EX 模組所開(kāi)發(fā)的,包含電源,
合宙LuatOS開(kāi)發(fā)板Core_Air780EP使用說(shuō)明
Core-Air780EP 開(kāi)發(fā)板是合宙通信推出的基于 Air780EP 模組所開(kāi)發(fā)的,包含電源
定時(shí)器的工作方式介紹
或?qū)崿F(xiàn)周期性事件的硬件模塊。它可以用于實(shí)現(xiàn)各種定時(shí)任務(wù),如定時(shí)中斷、PWM(脈沖寬度調(diào)制)輸出、頻率測(cè)量等。定時(shí)器通常由一個(gè)計(jì)數(shù)
與定時(shí)器相關(guān)的寄存器有哪些類型
在微控制器編程中,定時(shí)器是一種非常常見(jiàn)的功能模塊,用于實(shí)現(xiàn)各種定時(shí)和計(jì)數(shù)功能。定時(shí)器的工作原理是通過(guò)內(nèi)部的計(jì)數(shù)器來(lái)跟蹤時(shí)間的流逝,當(dāng)計(jì)數(shù)
鴻蒙開(kāi)發(fā)系統(tǒng)基礎(chǔ)能力:Timer定時(shí)器
設(shè)置一個(gè)定時(shí)器,該定時(shí)器在定時(shí)器到期后執(zhí)行一個(gè)函數(shù)。
一個(gè)定時(shí)器可以同時(shí)中斷定時(shí)和輸出pwm嗎?
一個(gè)定時(shí)器可以同時(shí)中斷定時(shí)和輸出pwm嗎
發(fā)表于 05-08 08:14
如何實(shí)現(xiàn)一個(gè)軟件定時(shí)器?
在Linux,uC/OS,F(xiàn)reeRTOS等操作系統(tǒng)中,都帶有軟件定時(shí)器,原理大同小異。典型的實(shí)現(xiàn)方法是:通過(guò)一個(gè)硬件定時(shí)器產(chǎn)生固定的時(shí)鐘節(jié)拍,每次硬件定時(shí)器中斷到,就對(duì)一個(gè)全局的時(shí)間
STM32同一定時(shí)器PWM輸出與定時(shí),會(huì)影響我的PWM輸出嗎?
求助各位大佬 ,我用定時(shí)器2通道1輸出PWM 定時(shí)器設(shè)置為TIM2_PERIODE (1000-1) TIM2_PRESCALER 36,現(xiàn)在還想開(kāi)啟2的
發(fā)表于 03-26 07:23
使用555定時(shí)器的可調(diào)雙定時(shí)器電路
定時(shí)器 IC 555 是最通用和最常用的 IC 之一,因?yàn)樗膽?yīng)用范圍更廣,如 PWM放大器、延遲定時(shí)器、開(kāi)關(guān)電路、占空比選擇器、時(shí)鐘脈沖發(fā)生器
評(píng)論