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驅動伺服控制器學習筆記
05-13 15:25
基于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
關注 151
成為作者 賺取收益
全部留言
0/200
成為第一個和作者交流的人吧
主站蜘蛛池模板: 免费播放av| 一区二区三区精品视频免费播放 | 久久久久久国产精品免费播放 | 色综合色天天久久婷婷基地 | 国产精品久久久久久久美男 | 99热操| 麻豆少妇厨房com | 97爱视频| 中文WWW新版资源在线 | 色久悠悠在线观看 | 欧美精品日韩精品国产精品 | 最新亚洲人成无码WWW | 欧美肥老太交性506070 | 艳妇荡乳豪妇荡乳av精东 | 国产熟睡乱子伦视频在线播放 | 国产精品yjizz视频网 | 少妇被粗大的猛烈进出动态图片 | 大地资源免费 | 国产精品久久久久久人妻精品 | 麻豆入口| 久久久91精品国产一区二区精品 | 国产精品久久午夜 | 性猛交╳XXX乱大交 精品国产不卡 | 扒开双腿猛进入喷水高潮视频 | 桃子视频在线观看高清免费视频 | 中文字幕亚洲综合久久菠萝蜜 | 好深好湿好硬顶到了好爽 | 女人本色免费观看 | 18禁止进入1000部高潮网站 | 在线观看无码AV网站永久免费 | 亚洲精品无码AV中文字幕 | 少妇被爽到高潮动态图 | 日韩亚洲区字幕 | 国产日韩AV免费无码一区二区三区 | 国产野精品久久久久久久不卡 | 337P亚洲日本中国大胆69 | 欧美精品乱码久久久久久 | 国产无区一区二区三麻豆 | 精品久久久久久久人人人人传媒 | 黄色观看大全 | 成年人中文字幕在线观看 |