99久久全国免费观看_国产一区二区三区四区五区VM_久久www人成免费看片中文_国产高清在线a视频大全_深夜福利www_日韩一级成人av

程序小白
認證:優質創作者
所在專題目錄 查看專題
RT-Thread驅動之路:stm32設備驅動開發之淺析注冊機制⑤
RT-Thread驅動之路:stm32設備驅動開發之SPI原理①
RT-Thread驅動之路:stm32設備驅動開發之SPI對象創建②
RT-Thread驅動之路:stm32設備驅動開發之SPI總線操作方法③
RT-Thread驅動之路:stm32設備驅動開發之HWTIMER開發①
RT-Thread驅動之路: Studio硬件移植篇①
作者動態 更多
基于stm32采用PWM驅動伺服控制器學習筆記
3星期前
基于STM32驅動TM1638學習筆記——軟件篇
04-19 12:42
基于TM1638驅動8位數碼管設計分享
02-24 11:26
RT-Thread驅動之路: Studio創建FAL分區⑤
01-02 08:30
RT-Thread驅動之路: Studio 掛載通用SPI flash④
2024-12-23 13:41

RT-Thread驅動之路:stm32設備驅動開發之HWTIMER開發①


      單片機開發中最熟悉的就是定時器開發了,定時器有軟件和硬件之分,這里我們主要以硬件定時器為主來進行介紹,一般的MCU都有3~15個不等的硬件定時器,HWTIMER(Hardware Timer)設備驅動開發主要是講硬件定時器外設功能對街道設備框架上。先來看下HWTIMER設備驅動 框架的層級結構:

      這里最主要是要理解兩層的概念,HWTIMER設備驅動框架層,這是一層通用的軟件抽象層,與具體的硬件無關,框架代碼為hwtimer.c,提供以下功能:

  •       向I/O設備管理層提供統一的接口供其調用。
  •       向設備驅動層提供具體的設備操作方法入口(函數指針)由其進行實現。
  •       提供注冊接口管理API,讓驅動層與框架層產生聯系。   我們具體要實現的事HWTIMER設備驅動層,一般命名為drv_hwtimer.c,也就是構架中紅線的部分。

      接下來創建一個HWTIMER設備,這個設備對象要與構架產生了聯系,所以必須由rt_hwtimer_device結構中派生出新的對象:

struct stm32_hwtimer
{
    rt_hwtimer_t time_device;                /*HWTIMER設備基類*/
    TIM_HandleTypeDef    tim_handle;  /*STM32定時器控制句柄*/
    IRQn_Type tim_irqn;                         /*STM32定時器中斷類型*/
    char *name;                                     /*STM32定時器名稱*/
};

      MCU一般不會只開一個定時器,以最常用的需要開多個定時器為例,所以我們實現上要建立的也是一個定時器列表:

#ifdef BSP_USING_TIM1
#ifndef TIM1_CONFIG
#define TIM1_CONFIG                                         \
    {                                                       \
       .tim_handle.Instance     = TIM1,                     \
       .tim_irqn                = TIM1_IRQn,                \
       .name                    = "timer1",                 \
    }
#endif /* TIM1_CONFIG */
#endif /* BSP_USING_TIM1 */

static struct stm32_hwtimer stm32_hwtimer_obj[] =
{
#ifdef BSP_USING_TIM1
    TIM1_CONFIG,
#endif

#ifdef BSP_USING_TIM2
    TIM2_CONFIG,
#endif

#ifdef BSP_USING_TIM3
    TIM3_CONFIG,
#endif

#ifdef BSP_USING_TIM4
    TIM4_CONFIG,
#endif
......
}

      這里并沒有初始化stm32_hwtimer_obj對象的所有字段,它并不完整,需要再后續的開發中進行賦值比如調用ops中相應函數進行進一步的初始化:

struct rt_hwtimer_ops
{
    void (*init)(struct rt_hwtimer_device *timer, rt_uint32_t state);
    rt_err_t (*start)(struct rt_hwtimer_device *timer, rt_uint32_t cnt, rt_hwtimer_mode_t mode);
    void (*stop)(struct rt_hwtimer_device *timer);
    rt_uint32_t (*count_get)(struct rt_hwtimer_device *timer);
    rt_err_t (*control)(struct rt_hwtimer_device *timer, rt_uint32_t cmd, void *args);
};

      真正的驅動開始需要實例化這些ops,下篇詳細講解關于ops如何實現的,感謝閱讀~!

聲明:本內容為作者獨立觀點,不代表電子星球立場。未經允許不得轉載。授權事宜與稿件投訴,請聯系:editor@netbroad.com
覺得內容不錯的朋友,別忘了一鍵三連哦!
贊 4
收藏 5
關注 149
成為作者 賺取收益
全部留言
0/200
成為第一個和作者交流的人吧
主站蜘蛛池模板: 亚洲第一天堂久久 | 让少妇爽到高潮视频 | 亚州av在线播放 | 精品卡一卡二卡3卡高清乱码 | 一区二区三区亚洲精品国 | 免费人成免费观看视频 | 免费av网站在线观看 | 美女大量吞精在线观看456 | 少妇边打电话边呻吟在线91 | 北条麻妃久久精品 | 精品无码国产污污污免费网站 | 女人被添全过程A片久久AV | 18禁黄无遮挡网站免费高清 | 久久艳片 | 激情综合网俺也去 | 日本韩国三级aⅴ在线观看 日本视频免费 | 女人和男人视频网站 | 国产69精品99久久久久久宅男 | 日日天天 | 婷婷综合基地俺也来 | 色呦呦久久久 | 女人被做到高潮免费视频 | 精品91在线视频 | 日韩不卡高清视频 | 久久亚洲影视 | 草久在线观看视频 | 国产啪视频 | 特黄一级视频 | 爱唯侦察国产合集亚洲 | 亚洲区色 | 中文字幕一区二区三区乱码在线 | 每日更新在线观看AV_手机 | youjazz性欧美 | 丝袜无码一区二区三区 | 在线播放精品视频 | 亚洲国产精品毛片AV不卡在线 | 国产资源第一页 | 91精品国产一区二区 | AV老司机Av天堂 | 国产黄大片在线观看画质优化 | 欧美中文字幕第一页 |