色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

【合宙Air105開發板試用體驗】Air105的定時器, 定時器中斷和PWM輸出

開發板試用精選 ? 來源:開發板試用 ? 作者:電子發燒友論壇 ? 2022-12-02 11:23 ? 次閱讀
本文來源電子發燒友社區,作者:Michael, 帖子地址:https://bbs.elecfans.com/jishu_2287621_1_1.html

Air105 的timer


定時器

  • 1 個 Timer 單元,包含 8 個獨立定時器: Timer0,Timer1,Timer2,Timer3,Timer4,Timer5,Timer6,Time7
  • 8 個定時器中斷源獨立,每個定時器單獨占 1 個中斷源
  • 使用 PCLK 時鐘頻率作為定時器計時鐘源
  • 定時器采用向下計數方式


PWM

  • 每個 Timer 單元定時器都支持 PWM 模式
  • PWM 模式最高頻率 PCLK/2
  • PWM 單次觸發(one shot)功能


定時器相關代碼

以下代碼基于 air105_projecthttps://gitee.com/iosetting/air105_project的庫函數

定時器模塊結構

在Air105中, 全局只有一個定時器模塊, TIMM0


  1. typedef struct
  2. {
  3. TIM_TypeDef TIM[TIM_NUM];
  4. __Iuint32_t TIM_IntStatus;
  5. __Iuint32_t TIM_EOI;
  6. __Iuint32_t TIM_RawIntStatus;
  7. __Iuint32_t TIM_Comp;
  8. __IO uint32_t TIM_ReloadCount[TIM_NUM];
  9. } TIM_Module_TypeDef;
復制代碼


這個 TIMM0 的地址定義在 air105.h 中


  1. #define TIMM0 ((TIM_Module_TypeDef *)TIMM0_BASE)
  2. #define AIR105_PERIPH_BASE (0x40000000UL) /*!< (Peripheral) Base Address */
  3. #define AIR105_APB0_BASE (AIR105_PERIPH_BASE + 0x10000)
  4. #define TIMM0_BASE (AIR105_APB0_BASE + 0x3000)
復制代碼

地址 = 0x40000000UL + 0x10000 + 0x3000 = 0x4001 3000
范圍 [0x4001_3000, 0x4001_3FFF]

定時器初始化

定時器的初始化只需要兩個參數: TIMx, 周期(時鐘數), 為配合定時器使用, 還需要定義中斷


  1. void Timer_Init(void)
  2. {
  3. TIM_InitTypeDef TIM_InitStruct;
  4. NVIC_InitTypeDef NVIC_InitStructure;
  5. // 開啟定時器的外設時鐘
  6. SYSCTRL_APBPeriphClockCmd(SYSCTRL_APBPeriph_TIMM0, ENABLE);
  7. SYSCTRL_APBPeriphResetCmd(SYSCTRL_APBPeriph_TIMM0, ENABLE);
  8. // 定時器的時鐘是 PCLK, 計數間隔為 1ms 對應的時鐘數
  9. TIM_InitStruct.TIM_Period = SYSCTRL->PCLK_1MS_VAL;
  10. // 使用 定時器0
  11. TIM_InitStruct.TIMx = TIM_0;
  12. // 初始化
  13. TIM_Init(TIMM0, &TIM_InitStruct);
  14. // 開啟定時器0的中斷
  15. TIM_ITConfig(TIMM0, TIM_InitStruct.TIMx, ENABLE);
  16. //NVIC
  17. NVIC_SetPriorityGrouping(NVIC_PriorityGroup_0);
  18. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  19. NVIC_InitStructure.NVIC_IRQChannel = TIM0_0_IRQn;
  20. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  21. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  22. NVIC_Init(&NVIC_InitStructure);
  23. // 啟動定時器0
  24. TIM_Cmd(TIMM0, (TIM_NumTypeDef)TIM_0, ENABLE);
  25. }
復制代碼



定時器中斷處理

Air105對應每個定時器, 各有一個中斷處理函數, 可以查看 startup.air105.s 中的中斷向量定義


  1. TIM0_0_IRQHandler
  2. TIM0_1_IRQHandler
  3. TIM0_2_IRQHandler
  4. TIM0_3_IRQHandler
  5. TIM0_4_IRQHandler
  6. TIM0_5_IRQHandler
  7. TIM0_6_IRQHandler
  8. TIM0_7_IRQHandler
復制代碼


對應 Timer0 的中斷處理, 寫在 air105_it.c. TIM_ClearITPendingBit 和 NVIC_ClearPendingIRQ 是必須調用的, 用于清除中斷


  1. void TIM0_0_IRQHandler(void)
  2. {
  3. TIM_ClearITPendingBit(TIMM0, TIM_0);
  4. NVIC_ClearPendingIRQ(TIM0_0_IRQn);
  5. }
復制代碼


下面加入處理邏輯的例子, 每秒調用一次 timer_handler(), 注意不要在中斷處理中使用耗時的工作


  1. extern uint32_t timer_count;
  2. extern void timer_handler(void);
  3. void TIM0_0_IRQHandler(void)
  4. {
  5. timer_count++;
  6. if (timer_count >= 1000)
  7. {
  8. timer_count = 0;
  9. timer_handler();
  10. }
  11. TIM_ClearITPendingBit(TIMM0, TIM_0);
  12. NVIC_ClearPendingIRQ(TIM0_0_IRQn);
  13. }
復制代碼


定時器示例代碼

使用Timer0控制板載LED每隔一秒閃爍
https://gitee.com/iosetting/air105_project/tree/master/Demos/Timer/Timer_Blink

Air105 的 PWM

Air105 的8個獨立定時器均可編程產生PWM信號. 當用戶設定TimerNControlReg中PWM比特位為1后,定時器進入PWM工作模式. 此時 PWM 由 TimerNLoadCount2 和 TimerNLoadCount 寄存器分別控制高電平及低電平周期翻轉輸出.

頻率和占空比設置

高電平周期 = (TimerNLoadCount2 + 1) * PCLK_Period
低電平周期 = (TimerNLoadCount + 1) * PCLK_Period

PWM 相關代碼

PWM初始化也只需要三個參數 TIMx 和高低電平兩個周期, 兩者之和就是一個PWM周期


  1. typedef struct
  2. {
  3. TIM_NumTypeDef TIMx;
  4. uint32_t TIM_LowLevelPeriod;
  5. uint32_t TIM_HighLevelPeriod;
  6. }TIM_PWMInitTypeDef;
復制代碼


用Timer5初始化


  1. void TimerPWM_Init(void)
  2. {
  3. TIM_PWMInitTypeDef TIM_PWMInitStruct;
  4. SYSCTRL_APBPeriphClockCmd(SYSCTRL_APBPeriph_TIMM0, ENABLE);
  5. SYSCTRL_APBPeriphResetCmd(SYSCTRL_APBPeriph_TIMM0, ENABLE);
  6. //Timer5 -> PWM5
  7. TIM_PWMInitStruct.TIM_HighLevelPeriod = SYSCTRL->PCLK_1MS_VAL;
  8. TIM_PWMInitStruct.TIM_HighLevelPeriod = 0;
  9. TIM_PWMInitStruct.TIMx = TIM_5;
  10. TIM_PWMInit(TIMM0, &TIM_PWMInitStruct);
  11. TIM_Cmd(TIMM0, TIM_5, ENABLE);
  12. }
復制代碼


將 PB5 功能復用為 PWM5


  1. GPIO_InitTypeDef gpio;
  2. gpio.GPIO_Pin = GPIO_Pin_5;
  3. gpio.GPIO_Mode = GPIO_Mode_Out_PP;
  4. gpio.GPIO_Remap = GPIO_Remap_2;
  5. GPIO_Init(GPIOB, &gpio);
復制代碼


實時調節占空比, 后兩個參數代表PCLK時鐘周期個數


  1. TIM_SetPWMPeriod(TIMM0, TIM_5, period - high_period, high_period);
復制代碼


PWM示例代碼

使用PWM5(Timer5)控制LED產生呼吸燈效果
https://gitee.com/iosetting/air105_project/tree/master/Demos/PWM/PWM_FadeLED

示例接線:

根據開發板的BOMPCB查看https://wiki.luatos.com/_static/bom/Air105.html
Timer5對應的PWM5輸出, 對應開發板的SP2_MI, 開發板上的PWM5對應的是PC7, 要注意, 別接錯了.
運行示例, 將一個LED串接一個1-5K的電阻, 接在SP2_MI和GND之間, 就能看到呼吸燈的效果了。
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 合宙通信
    +關注

    關注

    0

    文章

    148

    瀏覽量

    1794
  • Air105
    +關注

    關注

    0

    文章

    48

    瀏覽量

    306
收藏 人收藏

    評論

    相關推薦

    定時器已安排!開發小白看過來~

    本文將為您詳細介紹Air201定時器的基本操作與設置,確保您輕松上手,包教包會! 在Air201模組搭載的LuatOS系統中,定時器(timer)是一項基礎且關鍵的服務。 它允許
    的頭像 發表于 12-31 14:30 ?122次閱讀
    <b class='flag-5'>定時器</b>已安排!<b class='flag-5'>開發</b>小白看過來~

    Air780E的心跳:定時器精確計時的科學與藝術

    大家都知道定時器在多種應用場景中都發揮著重要作用,如定時發送數據、周期性檢查傳感狀態等,今天我以Air780E模組為例。
    的頭像 發表于 11-11 09:34 ?282次閱讀
    <b class='flag-5'>Air</b>780E的心跳:<b class='flag-5'>定時器</b>精確計時的科學與藝術

    如何使用Air780E開發板?看這篇就夠了!

    ? 一、綜述 CORE-AIR780E 開發板通信推出的基于 Air780E 模組所開發
    的頭像 發表于 10-23 17:07 ?529次閱讀
    如何使用<b class='flag-5'>Air</b>780E<b class='flag-5'>開發板</b>?看這篇就夠了!

    低功耗4G模組AIR780EX ——開發板使用說明

    EVB-AIR780EX 開發板通信推出的基于 Air780EX 模組所開發的,包含電源,
    的頭像 發表于 09-11 11:55 ?786次閱讀
    <b class='flag-5'>合</b><b class='flag-5'>宙</b>低功耗4G模組<b class='flag-5'>AIR</b>780EX ——<b class='flag-5'>開發板</b>使用說明

    4G模組Air780E開發板使用手冊

    開發板Air780E使用說明
    的頭像 發表于 09-09 18:22 ?819次閱讀
    <b class='flag-5'>合</b><b class='flag-5'>宙</b>4G模組<b class='flag-5'>Air</b>780E<b class='flag-5'>開發板</b>使用手冊

    LuatOS開發板Core_Air780EP使用說明

    Core-Air780EP 開發板通信推出的基于 Air780EP 模組所開發的,包含電源
    的頭像 發表于 09-03 17:38 ?652次閱讀
    <b class='flag-5'>合</b><b class='flag-5'>宙</b>LuatOS<b class='flag-5'>開發板</b>Core_<b class='flag-5'>Air</b>780EP使用說明

    低功耗4G模組Air700EAQ——開發板使用說明

    低功耗4G模組Air700EAQ——開發板使用說明
    的頭像 發表于 08-30 17:14 ?1187次閱讀
    <b class='flag-5'>合</b><b class='flag-5'>宙</b>低功耗4G模組<b class='flag-5'>Air</b>700EAQ——<b class='flag-5'>開發板</b>使用說明

    LuatOS開發板使用手冊——Air700ECQ

    LuatOS開發板使用說明——Air700ECQ
    的頭像 發表于 08-23 16:28 ?624次閱讀
    <b class='flag-5'>合</b><b class='flag-5'>宙</b>LuatOS<b class='flag-5'>開發板</b>使用手冊——<b class='flag-5'>Air</b>700ECQ

    定時器的工作方式介紹

    或實現周期性事件的硬件模塊。它可以用于實現各種定時任務,如定時中斷PWM(脈沖寬度調制)輸出、頻率測量等。定時器通常由一個計數
    的頭像 發表于 07-12 10:29 ?1088次閱讀

    定時器相關的寄存有哪些類型

    在微控制編程中,定時器是一種非常常見的功能模塊,用于實現各種定時和計數功能。定時器的工作原理是通過內部的計數來跟蹤時間的流逝,當計數
    的頭像 發表于 07-12 10:25 ?1046次閱讀

    鴻蒙開發系統基礎能力:Timer定時器

    設置一個定時器,該定時器定時器到期后執行一個函數。
    的頭像 發表于 06-28 11:33 ?1058次閱讀
    鴻蒙<b class='flag-5'>開發</b>系統基礎能力:Timer<b class='flag-5'>定時器</b>

    一個定時器可以同時中斷定時輸出pwm嗎?

    一個定時器可以同時中斷定時輸出pwm
    發表于 05-08 08:14

    如何實現一個軟件定時器

    在Linux,uC/OS,FreeRTOS等操作系統中,都帶有軟件定時器,原理大同小異。典型的實現方法是:通過一個硬件定時器產生固定的時鐘節拍,每次硬件定時器中斷到,就對一個全局的時間
    的頭像 發表于 04-29 11:00 ?726次閱讀

    STM32同一定時器PWM輸出定時,會影響我的PWM輸出嗎?

    求助各位大佬 ,我用定時器2通道1輸出PWM 定時器設置為TIM2_PERIODE (1000-1) TIM2_PRESCALER 36,現在還想開啟2的
    發表于 03-26 07:23

    使用555定時器的可調雙定時器電路

    定時器 IC 555 是最通用和最常用的 IC 之一,因為它的應用范圍更廣,如 PWM放大器、延遲定時器、開關電路、占空比選擇、時鐘脈沖發生
    的頭像 發表于 02-25 15:16 ?2369次閱讀
    使用555<b class='flag-5'>定時器</b>的可調雙<b class='flag-5'>定時器</b>電路
    主站蜘蛛池模板: 被黑人群jian又粗又大H | 在线成年av动漫电影 | 久久热国产在线视频 | 午夜性色一区二区三区不卡视频 | 国产亚洲精品看片在线观看 | 天美麻豆成人AV精品 | 飘雪在线观看免费完整版 | 国产亚洲精品在浅麻豆 | 超碰97人人做人人爱网站 | 无限资源在线观看高清 | 亚洲嫩草AV永久无码精品无码 | 无人区在线日本高清免费 | 蜜芽最新域名解析网站 | 紧致肉肉高h | 欧美日韩高清一区二区三区 | 免费看的一级毛片 | 农民工老头在出租屋嫖老熟女 | 国产在线精彩亚洲久久 | 久久成人免费大片 | 亚洲免费无码中文在线亚洲在 | 岳打开双腿开始配合日韩视频 | 黄色直接观看 | 伊人久久大香线蕉avapp下载 | 大学生第一次破女在线观看 | 亚洲日本激情 | 女仆翻身大作战 | 直插下身完整的欧美版 | 国产免费阿v精品视频网址 国产免费69成人精品视频 | 中国午夜伦理片 | 4399的视频BD高清在线观看免费 | xx在线观看 | 99re28久久热在线观看 | 欧美日韩亚洲成人 | 亚洲蜜芽在线观看精品一区 | 久久AV喷吹AV高潮欧美 | 蜜柚视频网在线观看免费 | 亚洲精品午睡沙发系列 | 把手戳进美女尿口里动态图 | 亚洲精品www久久久久久久软件 | 成人a视频片在线观看免费 成人a毛片久久免费播放 | 四虎国产精品免费观看视频 |