單芯片解決方案,開啟全新體驗——W55MH32 高性能以太網(wǎng)單片機
W55MH32是WIZnet重磅推出的高性能以太網(wǎng)單片機,它為用戶帶來前所未有的集成化體驗。這顆芯片將強大的組件集于一身,具體來說,一顆W55MH32內(nèi)置高性能Arm? Cortex-M3核心,其主頻最高可達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 提供了兩種選擇:QFN68和QFN100。
W55MH32Q采用QFN68封裝版本,尺寸為8x8mm,它擁有36個GPIO、3個ADC、12通道DMA、17個定時器、2個I2C、3個串口、2個SPI接口(其中1個帶I2S接口復(fù)用)、1個CAN以及1個USB2.0。在保持與同系列其他版本一致的核心性能基礎(chǔ)上,僅減少了部分GPIO以及SDIO接口,其他參數(shù)保持一致,性價比優(yōu)勢顯著,尤其適合網(wǎng)關(guān)模組等對空間布局要求較高的場景。緊湊的尺寸和精簡化外設(shè)配置,使其能夠在有限空間內(nèi)實現(xiàn)高效的網(wǎng)絡(luò)連接與數(shù)據(jù)交互,成為物聯(lián)網(wǎng)網(wǎng)關(guān)、邊緣計算節(jié)點等緊湊型設(shè)備的理想選擇。 同系列還有QFN100封裝的W55MH32L版本,該版本擁有更豐富的外設(shè)資源,適用于需要多接口擴展的復(fù)雜工控場景,軟件使用方法一致。更多信息和資料請進入http://www.w5500.com/網(wǎng)站或者私信獲取。
此外,本W(wǎng)55MH32支持硬件加密算法單元,WIZnet還推出TOE+SSL應(yīng)用,涵蓋TCP SSL、HTTP SSL以及MQTT SSL等,為網(wǎng)絡(luò)通信安全再添保障。
為助力開發(fā)者快速上手與深入開發(fā),基于W55MH32Q這顆芯片,WIZnet精心打造了配套開發(fā)板。開發(fā)板集成WIZ-Link芯片,借助一根USB C口數(shù)據(jù)線,就能輕松實現(xiàn)調(diào)試、下載以及串口打印日志等功能。開發(fā)板將所有外設(shè)全部引出,拓展功能也大幅提升,便于開發(fā)者全面評估芯片性能。
若您想獲取芯片和開發(fā)板的更多詳細信息,包括產(chǎn)品特性、技術(shù)參數(shù)以及價格等,歡迎訪問官方網(wǎng)頁:http://www.w5500.com/,我們期待與您共同探索W55MH32的無限可能。
第十四章 ADC(下篇)
1 例程設(shè)計
1.1 ADC_Double例程
這是一個基于 W55MH32 的 ADC(模擬 - 數(shù)字轉(zhuǎn)換器)雙模式測試例程。它的主要功能是配置串口、ADC 和 DMA,并且通過 ADC1 和 ADC2 同時對模擬信號進行采樣,最后把采樣結(jié)果通過串口打印出來。下面是對這個例程的設(shè)計分析:
1.系統(tǒng)初始化
?配置系統(tǒng)時鐘、延時函數(shù)、串口、ADC 和 DMA。
?打印系統(tǒng)時鐘頻率信息。
2.ADC 雙模式采樣
?ADC1 和 ADC2 工作于規(guī)則同步模式,同時對通道 0 和通道 1 進行采樣。
?轉(zhuǎn)換結(jié)果通過 DMA 傳輸?shù)絻?nèi)存緩沖區(qū)。
void ADC_Configuration(void) { ADC_InitTypeDef ADC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_ADC1 | RCC_APB2Periph_ADC2, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; GPIO_Init(GPIOA, &GPIO_InitStructure); RCC_ADCCLKConfig(RCC_PCLK2_Div8); ADC_DeInit(ADC1); ADC_DeInit(ADC2); // 配置為規(guī)則同步模式 ADC_InitStructure.ADC_Mode = ADC_Mode_RegSimult; ADC_InitStructure.ADC_ScanConvMode = DISABLE; ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfChannel = 1; ADC_Init(ADC1, &ADC_InitStructure); ADC_Init(ADC2, &ADC_InitStructure); /* channel configuration */ ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_239Cycles5); ADC_RegularChannelConfig(ADC2, ADC_Channel_1, 1, ADC_SampleTime_239Cycles5); /* module enablement */ ADC_Cmd(ADC1, ENABLE); ADC_Cmd(ADC2, ENABLE); /* adc calibration */ ADC_ResetCalibration(ADC1); while (ADC_GetResetCalibrationStatus(ADC1)); ADC_StartCalibration(ADC1); while (ADC_GetCalibrationStatus(ADC1)); ADC_ResetCalibration(ADC2); while (ADC_GetResetCalibrationStatus(ADC2)); ADC_StartCalibration(ADC2); while (ADC_GetCalibrationStatus(ADC2)); DMA_Configuration(); }
3.數(shù)據(jù)處理與輸出
?DMA 傳輸完成后觸發(fā)中斷,將 ADC 數(shù)字值轉(zhuǎn)換為電壓值并通過串口打印。
void DMA1_Channel1_IRQHandler(void) { if (DMA_GetITStatus(DMA1_IT_TC1) != RESET) { DMA_ClearITPendingBit(DMA1_IT_TC1); DMA_ClearFlag(DMA1_FLAG_TC1); // 數(shù)據(jù)處理與輸出 printf("ADC1 Code Value = %d ,voltage value = %2.4fn", DAM_ADC_Value[0] & 0xFFFF, (float)VREF * (DAM_ADC_Value[0] & 0xFFFF) / 4095 / 1000); printf("ADC2 Code Value = %d ,voltage value = %2.4fn", (DAM_ADC_Value[0] >> 16) & 0xFFFF, (float)VREF * ((DAM_ADC_Value[0] >> 16) & 0xFFFF) / 4095 / 1000); } }
1.2 ADC_Single例程
該例程是一個基于 W55MH32 微控制器的 ADC 單通道采樣程序,主要功能是周期性采集模擬輸入信號并通過串口輸出 ADC 值及其對應(yīng)的電壓。以下是詳細的工作流程總結(jié):
1.時鐘配置
?獲取系統(tǒng)各時鐘頻率(SYSCLK/HCLK/PCLK/ADCCLK),并通過串口打印。
2.UART 配置
?初始化 USART1 為 115200 波特率,用于串口輸出數(shù)據(jù)。
3.ADC 配置
?使能 ADC1 時鐘,配置 PA6 為模擬輸入模式。
?ADC 工作在獨立模式,禁用連續(xù)轉(zhuǎn)換,啟用掃描模式(單通道時僅觸發(fā)一次轉(zhuǎn)換)。
?執(zhí)行 ADC 校準以確保精度。
void ADC_Configuration(void) { uint32_t i; ADC_InitTypeDef ADC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; // 使能 ADC1 和 GPIOA 時鐘 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_ADC1, ENABLE); // 配置 PA6 為模擬輸入模式 GPIO_InitStructure.GPIO_Pin = ADC_TEST_CHANNEL_PIN; // PA6 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_Init(GPIOA, &GPIO_InitStructure); // ADC 時鐘配置(PCLK2 的 1/8) RCC_ADCCLKConfig(RCC_PCLK2_Div8); ADC_DeInit(ADC1); // 復(fù)位 ADC1 // ADC 初始化配置 ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; // 獨立模式 ADC_InitStructure.ADC_ScanConvMode = ENABLE; // 啟用掃描模式(單通道時僅轉(zhuǎn)換一次) ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; // 禁用連續(xù)轉(zhuǎn)換,需軟件觸發(fā) ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; // 軟件觸發(fā) ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; // 右對齊 ADC_InitStructure.ADC_NbrOfChannel = CONV_CHANNEL_NUM; // 通道數(shù)(1) ADC_Init(ADC1, &ADC_InitStructure); // 配置 ADC 通道(通道 6,采樣時間 239.5 周期) for (i = 0; i < CONV_CHANNEL_NUM; i++) { ADC_RegularChannelConfig(ADC1, ADC_CovChannel[i], i + 1, ADC_SampleTIME[i]); } // 啟動 ADC 轉(zhuǎn)換并使能 ADC ADC_SoftwareStartConvCmd(ADC1, ENABLE); ADC_Cmd(ADC1, ENABLE); // ADC 校準 ADC_ResetCalibration(ADC1); while (ADC_GetResetCalibrationStatus(ADC1)); ADC_StartCalibration(ADC1); while (ADC_GetCalibrationStatus(ADC1)); // 配置 DMA 傳輸 DMA_Configuration(); }
4.DMA 配置
?設(shè)置 DMA1 通道 1 為循環(huán)模式,將 ADC 數(shù)據(jù)寄存器(ADC1->DR)的數(shù)據(jù)傳輸?shù)絻?nèi)存數(shù)組DAM_ADC_Value。
?使能 DMA 傳輸完成中斷(TC 中斷),觸發(fā)數(shù)據(jù)處理。
1.3 ADC_VrefintTemper例程
該例程是一個基于 W55MH32 的 ADC 多通道采樣程序,主要用于同時采集內(nèi)部溫度傳感器和 VREFINT(內(nèi)部參考電壓)的模擬信號,并通過串口輸出測量結(jié)果。以下是其主要工作流程如下:
1.系統(tǒng)初始化
a.UART 配置:初始化 USART1 為 115200 波特率,用于串口輸出。
b.ADC 配置:使能 ADC1 時鐘,配置為獨立模式,啟用掃描模式(多通道依次轉(zhuǎn)換)。
?配置通道 16(溫度傳感器)和通道 17(VREFINT),采樣時間 239.5 周期。
?校準 ADC 并使能內(nèi)部溫度傳感器和 VREFINT。
ADC_InitStructure.ADC_ScanConvMode = ENABLE; // 啟用掃描模式,多通道依次轉(zhuǎn)換 ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; // 禁用連續(xù)轉(zhuǎn)換,需軟件觸發(fā) ADC_TempSensorVrefintCmd(ENABLE); // 使能內(nèi)部溫度傳感器和VREFINT
c.DMA 配置:設(shè)置 DMA1 通道 1 為循環(huán)模式,將 ADC 數(shù)據(jù)寄存器(ADC1->DR)的數(shù)據(jù)傳輸?shù)絻?nèi)存數(shù)組DAM_ADC_Value。
?使能 DMA 傳輸完成中斷(TC 中斷)。
2.主循環(huán)邏輯
a.每秒調(diào)用ADC_SoftwareStartConvCmd(ADC1, ENABLE)觸發(fā) ADC 轉(zhuǎn)換。
b.延時 1 秒后重復(fù)觸發(fā),實現(xiàn)周期性采樣。
3.數(shù)據(jù)處理與輸出
void DMA1_Channel1_IRQHandler(void) { if (DMA_GetITStatus(DMA1_IT_TC1) != RESET) // 檢查傳輸完成中斷 { DMA_ClearITPendingBit(DMA1_IT_TC1); // 清除中斷標志 DMA_ClearFlag(DMA1_FLAG_TC1); // 計算溫度傳感器和VREFINT的電壓值(VREF=3.3V,ADC精度12位) float tempVoltage = (float)VREF * DAM_ADC_Value[0] / 4095 / 1000; // 溫度傳感器電壓 float vrefintVoltage = (float)VREF * DAM_ADC_Value[1] / 4095 / 1000; // VREFINT電壓 // 串口輸出結(jié)果 printf("Temperature Sensor AD Value: %d, Voltage: %.4f Vt", DAM_ADC_Value[0], tempVoltage); printf("VREFINT AD Value: %d, Voltage: %.4f Vn", DAM_ADC_Value[1], vrefintVoltage); } }
a.DMA 中斷處理:當(dāng) DMA 傳輸完成時,觸發(fā)DMA1_Channel1_IRQHandler。
b.電壓計算:根據(jù)公式電壓 = VREF × ADC值 / 4095 / 1000 計算實際電壓值(VREF=3.3V)。
c.串口打印:輸出溫度傳感器和 VREFINT 的 ADC 值及電壓值。
2 下載驗證
2.1 ADC_Double例程
程序運行時,ADC1和ADC2以規(guī)則同步模式周期性采樣兩個模擬通道(PA0和PA1),轉(zhuǎn)換結(jié)果通過DMA傳輸至內(nèi)存。每次DMA傳輸完成后觸發(fā)中斷,在中斷中計算并通過串口打印ADC1和ADC2的原始數(shù)值(12位)及對應(yīng)的電壓值(單位:V),顯示間隔由主循環(huán)中的1秒延時控制。系統(tǒng)啟動時會輸出各時鐘頻率參數(shù),隨后每秒更新一次ADC數(shù)據(jù)。
2.2 ADC_Single例程
程序運行時,系統(tǒng)首先輸出各時鐘頻率參數(shù),隨后每秒觸發(fā)一次ADC1通道6(PA6)的模擬信號采樣。ADC轉(zhuǎn)換結(jié)果通過DMA自動傳輸至內(nèi)存,每次DMA傳輸完成后觸發(fā)中斷,在中斷服務(wù)函數(shù)中計算并通過串口打印ADC原始值(12位)及對應(yīng)的電壓值(單位:V)。系統(tǒng)以1秒為間隔循環(huán)觸發(fā)采樣,實現(xiàn)周期性數(shù)據(jù)更新,最終在串口終端每秒顯示一次ADC數(shù)據(jù)。
2.3 ADC_VrefintTemper例程
程序運行時,系統(tǒng)首先輸出各時鐘頻率參數(shù),隨后每秒觸發(fā)一次ADC1通道16(內(nèi)部溫度傳感器)和通道17(VREFINT)的模擬信號采樣。ADC轉(zhuǎn)換結(jié)果通過DMA自動傳輸至內(nèi)存,每次DMA傳輸完成后觸發(fā)中斷,在中斷服務(wù)函數(shù)中計算并通過串口打印兩個通道的ADC原始值(12位)及對應(yīng)的電壓值(單位:V)。系統(tǒng)以1秒為間隔循環(huán)觸發(fā)采樣,實現(xiàn)周期性數(shù)據(jù)更新,最終在串口終端每秒顯示一次內(nèi)部溫度傳感器和VREFINT的測量結(jié)果。
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ū)域包括:澳大利亞、印度、土耳其、亞洲(韓國和日本除外)。
審核編輯 黃宇
-
adc
+關(guān)注
關(guān)注
99文章
6709瀏覽量
549239
發(fā)布評論請先 登錄
視頻詳解:上海尤老師verilog入門到實戰(zhàn)第十四課
「正點原子Linux連載」第十四章蜂鳴器試驗
第十四講 555定時器

模擬電路網(wǎng)絡(luò)課件 第十四節(jié):放大電路的頻率響應(yīng)

PinTech品致第十四屆中國高校電力電子與電力傳動學(xué)術(shù)年會
易華錄精彩亮相第十四屆交博會探討智慧交通新思路
才茂亮相第十四屆配電技術(shù)應(yīng)用大會
【北京迅為】iTOP-i.MX6開發(fā)板使用手冊第四部分固件編譯第十四章非設(shè)備樹Android4.4系統(tǒng)編譯

評論