單芯片解決方案,開啟全新體驗——W55MH32 高性能以太網(wǎng)單片機
W55MH32 是 WIZnet 重磅推出的高性能以太網(wǎng)單片機,它為用戶帶來前所未有的集成化體驗。這顆芯片將強大的組件集于一身,具體來說,一顆 W55MH32 內(nèi)置高性能 Arm? Cortex-M3 核心,其主頻最高可達(dá) 216MHz;配備 1024KB FLASH 與 96KB SRAM,滿足存儲與數(shù)據(jù)處理需求;集成 TOE 引擎,包含 WIZnet 全硬件 TCP/IP 協(xié)議棧、內(nèi)置MAC 以及 PHY,擁有獨立的 32KB 以太網(wǎng)收發(fā)緩存,可供 8 個獨立硬件 socket 使用。如此配置,真正實現(xiàn)了 All-in-One 解決方案,為開發(fā)者提供極大便利。
在封裝規(guī)格上,W55MH32 提供了兩種選擇:100QFN和68QFN。
W55MH32L 采用 100QFN 封裝,尺寸為 12x12mm,其資源豐富,擁有 66 個 GPIO、3 個 ADC、12 通道 DMA、17 個定時器、2 個 I2C、5 個串口、2 個 SPI 接口(其中 1 個帶 I2S 接口復(fù)用)、1 個 CAN、1 個 USB2.0 以及 1 個 SDIO 接口。
而對于那些對產(chǎn)品布局緊湊度有要求的用戶,W55MH32Q 是理想之選。它采用 68QFN 封裝,尺寸為 8x8mm,相較于 W55MH32L,僅減少了部分 GPIO 以及 SDIO 接口,其他參數(shù)保持一致,性價比優(yōu)勢顯著。
此外,本W(wǎng)55MH32支持硬件加密算法單元,WIZnet 還推出 TOE+SSL 應(yīng)用,涵蓋 TCP SSL、HTTP SSL 以及 MQTT SSL 等,為網(wǎng)絡(luò)通信安全再添保障。
為助力開發(fā)者快速上手與深入開發(fā),基于 W55MH32L 和 W55MH32Q 這兩顆芯片,WIZnet 精心打造了配套開發(fā)板。開發(fā)板集成 WIZ-Link 芯片,借助一根 USB C 口數(shù)據(jù)線,就能輕松實現(xiàn)調(diào)試、下載以及串口打印日志等功能。開發(fā)板將所有外設(shè)全部引出,拓展功能也大幅提升,便于開發(fā)者全面評估芯片性能。

第十一章 通用定時器(下篇)
1 程序設(shè)計
1.1 TIM_InputCapture例程
此例程聚焦于 W55MH32 的定時器輸入捕獲功能,借助 TIM3 對外部信號的高電平持續(xù)時間展開測量,同時運用串口輸出相關(guān)信息。下面是詳細(xì)的程序分析:
1.初始化
?配置系統(tǒng)時鐘:RCC_ClkConfiguration()。
?初始化延時函數(shù):delay_init()。
?配置串口:UART_Configuration(),波特率設(shè)為 115200。
?獲取系統(tǒng)時鐘頻率并輸出。
配置定時器 3:TIM_Configuration(),用于輸入捕獲。
2.主循環(huán)
while (1)
{
if (TIM3_CAPTURE_STA & 0X80) //Successfully captured a rising edge
{
temp = TIM3_CAPTURE_STA & 0X3F;
temp *= 65536; //sum of overflow times
temp += TIM3_CAPTURE_VAL; //Get the total high time
printf("HIGH:%d usrn", temp); //Print total peak time
TIM3_CAPTURE_STA = 0; //Initiate the next capture
}
}
?持續(xù)檢查TIM3_CAPTURE_STA 標(biāo)志,若成功捕獲到一個完整的高電平脈沖(TIM3_CAPTURE_STA & 0X80 為真),則計算高電平持續(xù)時間,輸出該時間,接著重新初始化捕獲狀態(tài),準(zhǔn)備下一次捕獲。
3.定時器中斷服務(wù)程序
void TIM_Configuration(void)
{
// ...(GPIO和時基配置略)...
NVIC_InitTypeDef NVIC_InitStructure;
// 1. 配置NVIC中斷優(yōu)先級
NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; // 選擇TIM3中斷通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; // 搶占優(yōu)先級(數(shù)值越小優(yōu)先級越高)
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // 子優(yōu)先級
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; // 使能中斷
NVIC_Init(&NVIC_InitStructure); // 應(yīng)用配置
// 2. 使能TIM3中斷類型
TIM_ITConfig(TIM3, TIM_IT_Update | TIM_IT_CC2, ENABLE); // 使能更新中斷(計數(shù)器溢出)和通道2捕獲中斷
TIM_Cmd(TIM3, ENABLE); // 啟動定時器
}
?若尚未成功捕獲((TIM3_CAPTURE_STA & 0X80) == 0),則處理定時器更新中斷與捕獲中斷。
?捕獲到上升沿時,標(biāo)記已捕獲上升沿,把計數(shù)器清零,同時將捕獲極性設(shè)為下降沿捕獲。
?捕獲到下降沿時,標(biāo)記已成功捕獲高電平脈沖寬度,記錄捕獲值,再把捕獲極性設(shè)為上升沿捕獲。
?處理定時器溢出情況。
?清除中斷標(biāo)志。
4.串口輸出函數(shù)
?SER_PutChar()函數(shù)用于向串口發(fā)送單個字符。
?fputc()函數(shù)重定向標(biāo)準(zhǔn)輸出,使printf 能通過串口輸出。
3.4 TIM_OutPwm例程
該例程借助對系統(tǒng)時鐘、UART 和定時器的配置,實現(xiàn)了系統(tǒng)時鐘的初始化、UART 通信以及定時器 PWM 輸出的功能。通過printf()函數(shù)能夠輸出系統(tǒng)時鐘頻率信息,方便調(diào)試和監(jiān)控。下面是詳細(xì)的程序分析:
1.系統(tǒng)時鐘配置
?使用 8MHz 外部晶振(HSE)經(jīng) PLL9 倍頻生成 72MHz 系統(tǒng)時鐘
?配置總線頻率:HCLK=72MHz, PCLK1=36MHz, PCLK2=72MHz
?使能內(nèi)部低速(LSI)和高速(HSI)時鐘
2.串口通信
?USART1 配置為 115200 波特率,8 位數(shù)據(jù)位,1 位停止位
?PA9(TX)設(shè)為復(fù)用推挽輸出,PA10(RX)浮空輸入
?重定向printf到串口,自動添加rn轉(zhuǎn)換
3.定時器 PWM 輸出
void TIM_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
// 使能時鐘
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
// ================== GPIO配置:PA7為TIM3_CH2復(fù)用輸出 ==================
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; // PA7對應(yīng)TIM3_CH2
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // 復(fù)用推挽輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
// ================== 時基配置:1MHz計數(shù)時鐘,100μs周期 ==================
TIM_TimeBaseStructure.TIM_Period = 99; // 周期值(0-99,共100個計數(shù)周期)
TIM_TimeBaseStructure.TIM_Prescaler = 35; // PCLK1=36MHz預(yù)分頻36倍(35+1)
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
// ================== PWM配置:50%占空比,PWM模式2 ==================
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; // PWM模式2
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; // 使能輸出
TIM_OCInitStructure.TIM_Pulse = 49; // 脈沖值(決定占空比)
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; // 低電平有效
TIM_OC2Init(TIM3, &TIM_OCInitStructure); // 初始化通道2
// 使能預(yù)裝載和自動重裝載
TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM3, ENABLE);
// 啟動定時器
TIM_Cmd(TIM3, ENABLE);
TIM_CtrlPWMOutputs(TIM3, ENABLE); // 適用于高級定時器的輸出控制
}
?TIM3 通道 2 在 PA7 輸出 50% 占空比 PWM
?周期 100μs(計數(shù)周期 99),頻率 10kHz
?時基配置:PCLK1 (36MHz) 預(yù)分頻 36 得到 1MHz 計數(shù)時鐘
3.5 TIM_Tim9例程
此例程主要實現(xiàn)了 W55MH32 的定時器(TIM9)中斷測試以及 UART 串口通信功能,以下為其工作流程總結(jié):
1. 初始化階段
延時函數(shù)初始化:調(diào)用delay_init()函數(shù),對延時功能進(jìn)行初始化。
UART 串口配置:借助UART_Configuration(115200)函數(shù),把 USART1 的波特率設(shè)定為 115200,并完成 GPIO 引腳和 USART 的初始化工作。
獲取時鐘頻率:運用RCC_GetClocksFreq(&clocks)函數(shù)獲取系統(tǒng)時鐘頻率,然后通過printf()函數(shù)將系統(tǒng)時鐘、HCLK、PCLK1、PCLK2 以及 ADCCLK 的頻率信息打印出來。
2. 定時器配置階段
使能時鐘:開啟 TIM9 的時鐘。
定時器初始化:對定時器 TIM9 的周期、預(yù)分頻器、時鐘分割和計數(shù)模式等參數(shù)進(jìn)行配置。
使能中斷:使能 TIM9 的更新中斷,并對 NVIC 中斷優(yōu)先級進(jìn)行設(shè)置。
啟動定時器:啟動 TIM9 定時器。
3. 主循環(huán)階段
主函數(shù)中的while (1)是一個無限循環(huán),程序在此處持續(xù)等待定時器中斷的發(fā)生。
4.中斷處理階段
void TIM1_BRK_TIM9_IRQHandler(void)
{
// 4.1 檢查更新中斷標(biāo)志
if (TIM_GetITStatus(TIM9, TIM_IT_Update) != RESET)
{
// 4.2 清除中斷標(biāo)志
TIM_ClearITPendingBit(TIM9, TIM_IT_Update);
// 4.3 串口輸出中斷信息(打印函數(shù)名)
printf("%sn", __FUNCTION__);
}
}
當(dāng)定時器 TIM9 產(chǎn)生更新中斷時,TIM1_BRK_TIM9_IRQHandler()函數(shù)會被調(diào)用。在該函數(shù)里,會先檢查中斷標(biāo)志位,若標(biāo)志位被置位,則清除該標(biāo)志位,并通過printf()函數(shù)打印出當(dāng)前函數(shù)名。
5.串口輸出階段
// 5.1 單字符發(fā)送函數(shù)(阻塞式發(fā)送)
int SER_PutChar(int ch)
{
while (!USART_GetFlagStatus(USART_TEST, USART_FLAG_TC)); // 等待發(fā)送完成
USART_SendData(USART_TEST, (uint8_t)ch);
return ch;
}
// 5.2 重定向fputc函數(shù)(支持printf)
int fputc(int c, FILE *f)
{
if (c == 'n') // 自動添加回車符(適配串口終端)
{
SER_PutChar('r');
}
return SER_PutChar(c);
}
?SER_PutChar()函數(shù):用于向 USART1 發(fā)送單個字符,會等待發(fā)送完成標(biāo)志位被置位后再發(fā)送字符。
?fputc()函數(shù):對標(biāo)準(zhǔn)庫的fputc()函數(shù)進(jìn)行重定向,實現(xiàn)將字符輸出到 USART1。若遇到換行符n,會先發(fā)送回車符r,再發(fā)送換行符n。
該例程的核心功能是配置定時器 TIM9 使其按設(shè)定參數(shù)產(chǎn)生中斷,在中斷發(fā)生時通過串口輸出信息,同時利用串口輸出系統(tǒng)時鐘頻率等信息。
3.6 TIM_Touch例程
此例程的主要作用是實現(xiàn)觸摸檢測功能,并通過 LED 燈狀態(tài)的改變直觀地反饋觸摸事件,同時借助串口輸出相關(guān)調(diào)試信息,方便開發(fā)人員進(jìn)行調(diào)試與監(jiān)測。下面是具體功能的詳細(xì)介紹:
1.初始化階段
?系統(tǒng)初始化:調(diào)用delay_init()進(jìn)行延時初始化
?串口配置:通過UART_Configuration(115200)配置 USART1 為 115200 波特率
?時鐘信息輸出:獲取并打印系統(tǒng)時鐘各頻率參數(shù)
?硬件初始化:調(diào)用LED_Init()初始化 LED 控制引腳,調(diào)用TPAD_Init(6)初始化觸摸檢測模塊
2.主循環(huán)階段
?觸摸檢測:通過TPAD_Scan(0)實時檢測觸摸事件檢測到觸摸時:打印 "Touch" 并翻轉(zhuǎn) LED1 狀態(tài)
?LED0 周期性閃爍:通過計數(shù)器實現(xiàn) 150ms 周期(15×10ms)翻轉(zhuǎn) LED0
?循環(huán)延時:每次循環(huán)執(zhí)行 10ms 延時
3.硬件控制
// LED初始化函數(shù)(根據(jù)開發(fā)板類型選擇不同引腳)
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
#ifdef PIN48_BOARD
// 48腳開發(fā)板: LED0->PA7, LED1->PB0
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 推挽輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_SetBits(GPIOA, GPIO_Pin_7); // 初始狀態(tài)熄滅LED
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB, GPIO_Pin_0);
#else
// 64腳開發(fā)板: LED0->PC2, LED1->PC3
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_SetBits(GPIOC, GPIO_Pin_3 | GPIO_Pin_2); // 初始狀態(tài)熄滅LED
#endif
}
// 觸摸檢測初始化(依賴tpad.h庫實現(xiàn))
void TPAD_Init(u8 sysclk)
{
// 實際代碼在tpad.c中實現(xiàn),此處為函數(shù)聲明
// 配置觸摸檢測相關(guān)GPIO和定時器
}
// 觸摸掃描函數(shù)(返回1表示檢測到觸摸)
u8 TPAD_Scan(u8 mode)
{
// 實際代碼在tpad.c中實現(xiàn),此處為函數(shù)聲明
// mode=0: 單次觸發(fā)模式
// mode=1: 連續(xù)觸發(fā)模式
}
?LED 控制:根據(jù)開發(fā)板類型(PIN48/PIN64)控制對應(yīng) GPIO 引腳
?觸摸檢測:通過 TPAD 模塊實現(xiàn)觸摸信號采集與處理(具體實現(xiàn)由 tpad 庫提供)
4.功能特點
?雙 LED 狀態(tài)控制:LED0 周期性閃爍,LED1 觸摸觸發(fā)翻轉(zhuǎn)
?串口調(diào)試支持:通過 printf 輸出系統(tǒng)信息和觸摸事件
?硬件無關(guān)性:通過條件編譯適應(yīng)不同開發(fā)板(PIN48/PIN64)
2 下載驗證
2.1 TIM_InputCapture例程
程序下載到開發(fā)板運行后,串口會先輸出系統(tǒng)時鐘頻率信息與“TIM Input CaptureTest.”提示信息。之后,若PA7引腳有信號輸入,每當(dāng)成功捕獲到一個完整高電平脈沖,串口就會輸出該高電平的持續(xù)時間(單位為微秒),并自動準(zhǔn)備下一次捕獲。若信號頻率過高致計數(shù)器溢出,或信號電平異常,捕獲可能出現(xiàn)異常,需重新上電復(fù)位;若沒有信號輸入則無捕獲結(jié)果輸出。

2.2 TIM_OutPwm例程
該程序下載運行后,通過USART1(PA9/PA10)以115200波特率輸出系統(tǒng)時鐘信息:"SYSCLK: 72.0Mhz, HCLK: 72.0Mhz, PCLK1: 36.0Mhz, PCLK2: 72.0Mhz, ADCCLK: 72.0Mhz"和"TIM Out Test."。PA7引腳持續(xù)輸出10kHz頻率、50%占空比的PWM信號(低電平有效),周期100μs。程序執(zhí)行完畢后進(jìn)入無限循環(huán)保持運行狀態(tài),CPU空閑但PWM輸出持續(xù)。驗證時需用示波器觀察PA7波形,通過串口工具配置相同波特率查看打印信息,同時確保硬件連接正確(PA7接示波器、PA9接串口轉(zhuǎn)USB模塊)。

如果想查看PWM輸出的占空比,可以在循環(huán)里加這段代碼:
uint16_t pwm_value = TIM_GetCapture2(TIM3);
float duty_cycle = (float)pwm_value / 99 * 100;
printf("PWM Duty Cycle: %.2f%%n", duty_cycle);
delay_ms(1000);
這樣可以打印出PWM的占空比:

2.3 TIM_Tim9例程
程序啟動后,先進(jìn)行延時和串口初始化,輸出系統(tǒng)時鐘頻率信息與 “TIM Tim9 Base Test.” 提示,接著配置并啟動定時器 TIM9,隨后進(jìn)入無限循環(huán);當(dāng) TIM9 產(chǎn)生更新事件觸發(fā)中斷時,中斷服務(wù)函數(shù)會清除中斷標(biāo)志并通過串口輸出自身函數(shù)名,之后繼續(xù)等待下一次中斷。

2.4 TIM_Touch例程
程序運行后,LED0以150ms周期閃爍,檢測到觸摸時LED1狀態(tài)翻轉(zhuǎn)并通過串口打印"Touch",同時啟動時輸出系統(tǒng)時鐘頻率信息。
WIZnet 是一家無晶圓廠半導(dǎo)體公司,成立于 1998 年。產(chǎn)品包括互聯(lián)網(wǎng)處理器 iMCU?,它采用 TOE(TCP/IP 卸載引擎)技術(shù),基于獨特的專利全硬連線 TCP/IP。iMCU? 面向各種應(yīng)用中的嵌入式互聯(lián)網(wǎng)設(shè)備。
WIZnet 在全球擁有 70 多家分銷商,在香港、韓國、美國設(shè)有辦事處,提供技術(shù)支持和產(chǎn)品營銷。
香港辦事處管理的區(qū)域包括:澳大利亞、印度、土耳其、亞洲(韓國和日本除外)。
審核編輯 黃宇
-
單片機
+關(guān)注
關(guān)注
6067文章
44967瀏覽量
649085 -
定時器
+關(guān)注
關(guān)注
23文章
3298瀏覽量
117651 -
WIZnet
+關(guān)注
關(guān)注
3文章
20瀏覽量
42422 -
USART1
+關(guān)注
關(guān)注
0文章
10瀏覽量
3888 -
通用定時器
+關(guān)注
關(guān)注
1文章
19瀏覽量
3508
發(fā)布評論請先 登錄
第二十一章 TIM——通用定時器

明德?lián)P視頻分享點撥FPGA課程--第十一章 ?Signaltapll的使用技巧
WIZnet發(fā)布最新單片式以太網(wǎng)控制芯片W7100
單片機應(yīng)用開發(fā)技術(shù)基于Proteus單片機仿真和C語言編程第二版教學(xué)課件

WIZnet高性能以太網(wǎng)單片機W55MH32重磅發(fā)布!

即刻啟程,踏上W55MH32高性能以太網(wǎng)單片機學(xué)習(xí)之路!

第十二章 SysTick——系統(tǒng)定時器

第一章 W55MH32 高性能以太網(wǎng)單片機的學(xué)習(xí)方法概述

第二章 開發(fā)板與芯片介紹 詳解W55MH32芯片及開發(fā)板

W55MH32高性能以太網(wǎng)單片機教程 第九章 窗口看門狗(WWDG)

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

W55MH32高性能以太網(wǎng)單片機開發(fā)課件 第十四章 ADC(上篇)

評論