單芯片解決方案,開啟全新體驗——W55MH32 高性能以太網單片機
W55MH32是WIZnet重磅推出的高性能以太網單片機,它為用戶帶來前所未有的集成化體驗。這顆芯片將強大的組件集于一身,具體來說,一顆W55MH32內置高性能Arm? Cortex-M3核心,其主頻最高可達216MHz;配備1024KB FLASH與96KB SRAM,滿足存儲與數據處理需求;集成TOE引擎,包含WIZnet全硬件TCP/IP協議棧、內置MAC以及PHY,擁有獨立的32KB以太網收發緩存,可供8個獨立硬件socket使用。如此配置,真正實現了All-in-One解決方案,為開發者提供極大便利。
在封裝規格上,W55MH32 提供了兩種選擇:QFN68和QFN100。
W55MH32Q采用QFN68封裝版本,尺寸為8x8mm,它擁有36個GPIO、3個ADC、12通道DMA、17個定時器、2個I2C、3個串口、2個SPI接口(其中1個帶I2S接口復用)、1個CAN以及1個USB2.0。在保持與同系列其他版本一致的核心性能基礎上,僅減少了部分GPIO以及SDIO接口,其他參數保持一致,性價比優勢顯著,尤其適合網關模組等對空間布局要求較高的場景。緊湊的尺寸和精簡化外設配置,使其能夠在有限空間內實現高效的網絡連接與數據交互,成為物聯網網關、邊緣計算節點等緊湊型設備的理想選擇。 同系列還有QFN100封裝的W55MH32L版本,該版本擁有更豐富的外設資源,適用于需要多接口擴展的復雜工控場景,軟件使用方法一致。更多信息和資料請進入http://www.w5500.com/網站或者私信獲取。
此外,本W55MH32支持硬件加密算法單元,WIZnet還推出TOE+SSL應用,涵蓋TCP SSL、HTTP SSL以及MQTT SSL等,為網絡通信安全再添保障。
為助力開發者快速上手與深入開發,基于W55MH32Q這顆芯片,WIZnet精心打造了配套開發板。開發板集成WIZ-Link芯片,借助一根USB C口數據線,就能輕松實現調試、下載以及串口打印日志等功能。開發板將所有外設全部引出,拓展功能也大幅提升,便于開發者全面評估芯片性能。
若您想獲取芯片和開發板的更多詳細信息,包括產品特性、技術參數以及價格等,歡迎訪問官方網頁:http://www.w5500.com/,我們期待與您共同探索W55MH32的無限可能。
第十二章 高級定時器
W55MH32的高級控制定時器為TIM1和TIM8。
本章分為如下幾個小節:
1 TIM1 和 TIM8 簡介
2 高級定時器寄存器描述
1 TIM1和TIM8概述
1.1 TIM1和TIM8簡介
高級控制定時器(TIM1 和 TIM8)由一個 16 位的自動裝載計數器組成,它由一個可編程的預分頻器驅動。它適合多種用途,包含測量輸入信號的脈沖寬度(輸入捕獲),或者產生輸出波形(輸出比較、PWM、嵌入死區時間的互補 PWM 等)。使用定時器預分頻器和 RCC 時鐘控制預分頻器,可以實現脈沖寬度和波形周期從幾個微秒到幾個毫秒的調節。高級控制定時器(TIM1 和 TIM8)和通用定時器(TIMx)是完全獨立的,它們不共享任何資源。
1.2 TIM1和TIM8主要特性
TIM1和TIM8定時器的功能包括:
?16位向上、向下、向上/下自動裝載計數器
?16位可編程(可以實時修改)預分頻器,計數器時鐘頻率的分頻系數為1~65535之間的任意數值
?多達4個獨立通道:
·······輸入捕獲
·······輸出比較
·······PWM生成(邊緣或中間對齊模式)
·······單脈沖模式輸出
?死區時間可編程的互補輸出
?使用外部信號控制定時器和定時器互聯的同步電路
?允許在指定數目的計數器周期之后更新定時器寄存器的重復計數器
?剎車輸入信號可以將定時器輸出信號置于復位狀態或者一個已知狀態
?如下事件發生時產生中斷/DMA:
·······更新:計數器向上溢出/向下溢出,計數器初始化(通過軟件或者內部/外部觸發)
·······觸發事件(計數器啟動、停止、初始化或者由內部/外部觸發計數)
·······輸入捕獲
·······輸出比較
······剎車信號輸入
?觸發輸入作為外部時鐘或者按周期的電流管理
1.2 高級定時器功能框圖解析
高級定時器功能框圖如下:
高級控制定時器框圖
注: 根據控制位的設定,在 U(更新)事件時傳送預加載寄存器的內容至工作寄存器事件中斷和 DMA 輸出高級定時器的框圖和通用定時器框圖很類似,只是添加了其它的一些功能,如:重復計數器、帶死區控制的互補輸出通道、斷路輸入等。相同內容這里不再贅述,詳情請查看上一章節“第十一章 通用定時器(上篇)”的內容。新增功能在高級定時器框圖的位置如下:
① 重復計數器
在 W55MH32 系列中,高級定時器 TIM1 和 TIM8 都有重復計數器。下面來介紹一下重復計數器有什么作用?在學習基本定時器和通用定時器的時候,我們知道定時器發生上溢或者下溢時,會直接生成更新事件。但是有重復計數器的定時器并不完全是這樣的,定時器每次發生上溢或下溢時,重復計數器的值會減一,當重復計數器的值為 0 時,再發生一次上溢或者下溢才會生成定時器更新事件。如果我們設置重復計數器寄存器 RCR 的值為 N,那么更新事件將在定時器發生 N+1 次上溢或下溢時發生。這里需要注意的是重復計數器寄存器是具有影子寄存器的,所以 RCR 寄存器只是起緩沖的作用。RCR 寄存器的值會在更新事件發生時,被轉移至其影子寄存器中,從而真正生效。重復計數器的特性,在控制生成 PWM 信號時很有用,后面會有相應的實驗。
② 輸出比較
高級定時器輸出比較部分和通用定時器相比,多了帶死區控制的互補輸出功能。第②部分的 TIMx_CH1N、TIMx_CH2N 和 TIMx_CH3N 分別是定時器通道 1、通道 2 和通道 3的互補輸出通道,通道 4 是沒有互補輸出通道的。DTG 是死區發生器,死區時間由 DTG[7:0]位來配置。如果不使用互補通道和死區時間控制,那么高級定時器 TIM1 和 TIM8 和通用定時器的輸出比較部分使用方法基本一樣,只是要注意 MOE 位得置 1 定時器才能輸出。
③ 斷路功能
斷路功能也稱剎車功能,一般用于電機控制的剎車。F1 系列有一個斷路通道,斷路源可以是剎車輸入引腳(TIMx_BKIN),也可以是一個時鐘失敗事件。時鐘失敗事件由復位時鐘控制器中的時鐘安全系統產生。系統復位后,斷路功能默認被禁止,MOE 位為低。使能斷路功能的方法:將 TIMx_BDTR 的位 BKE 置 1。斷路輸入引腳 TIMx_BKIN 的輸入有效電平可通過 TIMx_BDTR 寄存器的位 BKP 設置。使能剎車功能后:由 TIMx_BDTR 的 MOE、OSSI、OSSR 位,TIMx_CR2 的 OISx、OISxN 位,TIMx_CCER 的 CCxE、CCxNE 位控制 OCx 和 OCxN 輸出狀態。無論何時,OCx和 OCxN 輸出都不能同時處在有效電平。
當發生斷路輸入后,會怎么樣?
1.MOE 位被異步地清零,OCx 和 OCxN 為無效、空閑或復位狀態(由 OSSI 位選擇)。
2.OCx 和 OCxN 的狀態:由相關控制位狀態決定,當使用互補輸出時:根據情況自動控制輸出電平,參考《W55MH32 參考手冊.pdf》手冊
3.BIF 位置 1,如果使能了 BIE 位,還會產生剎車中斷;如果使能了 TDE 位,會產生DMA 請求。
4.如果 AOE 位置 1,在下一個 更新事件 UEV 時,MOE 位被自動置 1。
2 定時器初始化結構體詳解
在標準庫函數頭文件w55mh32_tim.h中對定時器外設建立了四個初始化結構體,分別為時基初始化結構體TIM_TimeBaseInitTypeDef、 輸出比較初始化結構體TIM_OCInitTypeDef、輸入捕獲初始化結構體TIM_ICInitTypeDef和斷路和死區初始化結構體TIM_BDTRInitTypeDef, 高級控制定時器可以用到所有初始化結構體,通用定時器不能使用TIM_BDTRInitTypeDef結構體, 基本定時器只能使用時基結構體。接下來我們具體講解下這四個結構體。
2.1 TIM_TimeBaseInitTypeDef
時基結構體TIM_TimeBaseInitTypeDef用于定時器基礎參數設置,與TIM_TimeBaseInit函數配合使用完成配置。
代碼清單:高級定時器-1 定時器基本初始化結構體
typedef struct { uint16_t TIM_Prescaler; // 預分頻器 uint16_t TIM_CounterMode; // 計數模式 uint32_t TIM_Period; // 定時器周期 uint16_t TIM_ClockDivision; // 時鐘分頻 uint8_t TIM_RepetitionCounter; // 重復計算器 } TIM_TimeBaseInitTypeDef;
TIM_Prescaler: 定時器預分頻器設置,時鐘源經該預分頻器才是定時器計數時鐘CK_CNT,它設定PSC寄存器的值。 計算公式為:計數器時鐘頻率 (fCK_CNT) 等于 fCK_PSC / (PSC[15:0] + 1),可實現1至65536分頻。
TIM_CounterMode: 定時器計數方式,可設置為向上計數、向下計數以及中心對齊。高級控制定時器允許選擇任意一種。
TIM_Period: 定時器周期,實際就是設定自動重載寄存器ARR的值,ARR 為要裝載到實際自動重載寄存器(即影子寄存器)的值,可設置范圍為0至65535。
TIM_ClockDivision: 時鐘分頻,設置定時器時鐘CK_INT頻率與死區發生器以及數字濾波器采樣時鐘頻率分頻比。可以選擇1、2、4分頻。
TIM_RepetitionCounter: 重復計數器,只有8位,只存在于高級定時器。
2.2 TIM_OCInitTypeDef
輸出比較結構體TIM_OCInitTypeDef用于輸出比較模式,與TIM_OCxInit函數配合使用完成指定定時器輸出通道初始化配置。高級控制定時器有四個定時器通道,使用時都必須單獨設置。
代碼清單:高級定時器-2 定時器比較輸出初始化結構體
typedef struct { uint16_t TIM_OCMode; // 比較輸出模式 uint16_t TIM_OutputState; // 比較輸出使能 uint16_t TIM_OutputNState; // 比較互補輸出使能 uint32_t TIM_Pulse; // 脈沖寬度 uint16_t TIM_OCPolarity; // 輸出極性 uint16_t TIM_OCNPolarity; // 互補輸出極性 uint16_t TIM_OCIdleState; // 空閑狀態下比較輸出狀態 uint16_t TIM_OCNIdleState; // 空閑狀態下比較互補輸出狀態 } TIM_OCInitTypeDef;
TIM_OCMode: 比較輸出模式選擇,總共有八種,常用的為PWM1/PWM2。它設定CCMRx寄存器OCxM[2:0]位的值。
TIM_OutputState: 比較輸出使能,決定最終的輸出比較信號OCx是否通過外部引腳輸出。它設定TIMx_CCER寄存器CCxE/CCxNE位的值。
TIM_OutputNState: 比較互補輸出使能,決定OCx的互補信號OCxN是否通過外部引腳輸出。它設定CCER寄存器CCxNE位的值。
TIM_Pulse: 比較輸出脈沖寬度,實際設定比較寄存器CCR的值,決定脈沖寬度。可設置范圍為0至65535。
TIM_OCPolarity: 比較輸出極性,可選OCx為高電平有效或低電平有效。它決定著定時器通道有效電平。它設定CCER寄存器的CCxP位的值。
TIM_OCNPolarity: 比較互補輸出極性,可選OCxN為高電平有效或低電平有效。它設定TIMx_CCER寄存器的CCxNP位的值。
TIM_OCIdleState: 空閑狀態時通道輸出電平設置,可選輸出1或輸出0,即在空閑狀態(BDTR_MOE位為0)時,經過死區時間后定時器通道輸出高電平或低電平。它設定CR2寄存器的OISx位的值。
TIM_OCNIdleState: 空閑狀態時互補通道輸出電平設置,可選輸出1或輸出0,即在空閑狀態(BDTR_MOE位為0)時,經過死區時間后定時器互補通道輸出高電平或低電平, 設定值必須與TIM_OCIdleState相反。它設定是CR2寄存器的OISxN位的值。
2.3 TIM_ICInitTypeDef
輸入捕獲結構體TIM_ICInitTypeDef用于輸入捕獲模式,與TIM_ICInit函數配合使用完成定時器輸入通道初始化配置。 如果使用PWM輸入模式需要與TIM_PWMIConfig函數配合使用完成定時器輸入通道初始化配置。
代碼清單:高級定時器 定時器輸入捕獲初始化結構體
typedef struct { uint16_t TIM_Channel; // 輸入通道選擇 uint16_t TIM_ICPolarity; // 輸入捕獲觸發選擇 uint16_t TIM_ICSelection; // 輸入捕獲選擇 uint16_t TIM_ICPrescaler; // 輸入捕獲預分頻器 uint16_t TIM_ICFilter; // 輸入捕獲濾波器 } TIM_ICInitTypeDef;
TIM_Channel:捕獲通道ICx選擇,可選TIM_Channel_1、 TIM_Channel_2、TIM_Channel_3或TIM_Channel_4四個通道。它設定CCMRx寄存器CCxS位 的值。
TIM_ICPolarity:輸入捕獲邊沿觸發選擇,可選上升沿觸發、 下降沿觸發或邊沿跳變觸發。它設定CCER寄存器CCxP位和CCxNP位的值。
TIM_ICSelection:輸入通道選擇,捕獲通道ICx的信號可來自三個輸入通道,分別為TIM_ICSelection_DirectTI、 TIM_ICSelection_IndirectTI或TIM_ICSelection_TRC,具體的區別見下圖,輸入通道與捕獲通道IC的映射圖 。 如果是普通的輸入捕獲,4個通道都可以使用,如果是PWM輸入則只能使用通道1和通道2。它設定CCRMx寄存器的CCxS[1:0]位的值。
TIM_ICPrescaler: 輸入捕獲通道預分頻器,可設置1、2、4、8分頻,它設定CCMRx寄存器的ICxPSC[1:0]位的值。如果需要捕獲輸入信號的每個有效邊沿,則設置1分頻即可。
TIM_ICFilter: 輸入捕獲濾波器設置,可選設置0x0至0x0F。它設定CCMRx寄存器ICxF[3:0]位的值。一般我們不使用濾波器,即設置為0。
2.4 TIM_BDTRInitTypeDef
斷路和死區結構體TIM_BDTRInitTypeDef用于斷路和死區參數的設置,屬于高級定時器專用,用于配置斷路時通道輸出狀態,以及死區時間。 它與TIM_BDTRConfig函數配置使用完成參數配置。這個結構體的成員只對應BDTR這個寄存器,有關成員的具體使用配置請參考手冊BDTR寄存器的詳細描述。
代碼清單:高級定時器-4 斷路和死區初始化結構體
typedef struct { uint16_t TIM_OSSRState; // 運行模式下的關閉狀態選擇 uint16_t TIM_OSSIState; // 空閑模式下的關閉狀態選擇 uint16_t TIM_LOCKLevel; // 鎖定配置 uint16_t TIM_DeadTime; // 死區時間 uint16_t TIM_Break; // 斷路輸入使能控制 uint16_t TIM_BreakPolarity; // 斷路輸入極性 uint16_t TIM_AutomaticOutput; // 自動輸出使能 } TIM_BDTRInitTypeDef;
TIM_OSSRState: 運行模式下的關閉狀態選擇,它設定BDTR寄存器OSSR位的值。
TIM_OSSIState: 空閑模式下的關閉狀態選擇,它設定BDTR寄存器OSSI位的值。
TIM_LOCKLevel: 鎖定級別配置, BDTR寄存器LOCK[1:0]位的值。
TIM_DeadTime: 配置死區發生器,定義死區持續時間,可選設置范圍為0x0至0xFF。它設定BDTR寄存器DTG[7:0]位的值。
TIM_Break: 斷路輸入功能選擇,可選使能或禁止。它設定BDTR寄存器BKE位的值。
TIM_BreakPolarity: 斷路輸入通道BRK極性選擇,可選高電平有效或低電平有效。它設定BDTR寄存器BKP位的值。
TIM_AutomaticOutput: 自動輸出使能,可選使能或禁止,它設定BDTR寄存器AOE位的值。
WIZnet 是一家無晶圓廠半導體公司,成立于 1998 年。產品包括互聯網處理器 iMCU?,它采用 TOE(TCP/IP 卸載引擎)技術,基于獨特的專利全硬連線 TCP/IP。iMCU? 面向各種應用中的嵌入式互聯網設備。
WIZnet 在全球擁有 70 多家分銷商,在香港、韓國、美國設有辦事處,提供技術支持和產品營銷。
香港辦事處管理的區域包括:澳大利亞、印度、土耳其、亞洲(韓國和日本除外)。
審核編輯 黃宇
-
單片機
+關注
關注
6067文章
44973瀏覽量
649978 -
寄存器
+關注
關注
31文章
5433瀏覽量
124314 -
定時器
+關注
關注
23文章
3298瀏覽量
118765
發布評論請先 登錄
第十章 W55MH32中斷應用概覽

第二十二章 TIM——高級定時器

明德揚視頻分享點撥FPGA課程---第十二章??學習自檢方法
「正點原子STM32Mini板資料連載」第十二章 定時器中斷實驗
【正點原子Linux連載】第十二章官方SDK移植試驗-摘自【正點原子】I.MX6U嵌入式Linux驅動開發指南V1.0

詳解高精度定時器與高級控制定時器
即刻啟程,踏上W55MH32高性能以太網單片機學習之路!

第一章 W55MH32 高性能以太網單片機的學習方法概述

WIZnet W55MH32以太網單片機開發教程 第十一章 通用定時器(上篇)

WIZnet W55MH32以太網單片機開發教程第十一章 通用定時器(下篇)

評論