單芯片解決方案,開(kāi)啟全新體驗(yàn)——W55MH32 高性能以太網(wǎng)單片機(jī)
W55MH32是WIZnet重磅推出的高性能以太網(wǎng)單片機(jī),它為用戶帶來(lái)前所未有的集成化體驗(yàn)。這顆芯片將強(qiáng)大的組件集于一身,具體來(lái)說(shuō),一顆W55MH32內(nèi)置高性能Arm? Cortex-M3核心,其主頻最高可達(dá)216MHz;配備1024KB FLASH與96KB SRAM,滿足存儲(chǔ)與數(shù)據(jù)處理需求;集成TOE引擎,包含WIZnet全硬件TCP/IP協(xié)議棧、內(nèi)置MAC以及PHY,擁有獨(dú)立的32KB以太網(wǎng)收發(fā)緩存,可供8個(gè)獨(dú)立硬件socket使用。如此配置,真正實(shí)現(xiàn)了All-in-One解決方案,為開(kāi)發(fā)者提供極大便利。
在封裝規(guī)格上,W55MH32 提供了兩種選擇:QFN68和QFN100。
W55MH32Q采用QFN68封裝版本,尺寸為8x8mm,它擁有36個(gè)GPIO、3個(gè)ADC、12通道DMA、17個(gè)定時(shí)器、2個(gè)I2C、3個(gè)串口、2個(gè)SPI接口(其中1個(gè)帶I2S接口復(fù)用)、1個(gè)CAN以及1個(gè)USB2.0。在保持與同系列其他版本一致的核心性能基礎(chǔ)上,僅減少了部分GPIO以及SDIO接口,其他參數(shù)保持一致,性價(jià)比優(yōu)勢(shì)顯著,尤其適合網(wǎng)關(guān)模組等對(duì)空間布局要求較高的場(chǎng)景。緊湊的尺寸和精簡(jiǎn)化外設(shè)配置,使其能夠在有限空間內(nèi)實(shí)現(xiàn)高效的網(wǎng)絡(luò)連接與數(shù)據(jù)交互,成為物聯(lián)網(wǎng)網(wǎng)關(guān)、邊緣計(jì)算節(jié)點(diǎn)等緊湊型設(shè)備的理想選擇。 同系列還有QFN100封裝的W55MH32L版本,該版本擁有更豐富的外設(shè)資源,適用于需要多接口擴(kuò)展的復(fù)雜工控場(chǎng)景,軟件使用方法一致。更多信息和資料請(qǐng)進(jìn)入http://www.w5500.com/網(wǎng)站或者私信獲取。
此外,本W(wǎng)55MH32支持硬件加密算法單元,WIZnet還推出TOE+SSL應(yīng)用,涵蓋TCP SSL、HTTP SSL以及MQTT SSL等,為網(wǎng)絡(luò)通信安全再添保障。
為助力開(kāi)發(fā)者快速上手與深入開(kāi)發(fā),基于W55MH32Q這顆芯片,WIZnet精心打造了配套開(kāi)發(fā)板。開(kāi)發(fā)板集成WIZ-Link芯片,借助一根USB C口數(shù)據(jù)線,就能輕松實(shí)現(xiàn)調(diào)試、下載以及串口打印日志等功能。開(kāi)發(fā)板將所有外設(shè)全部引出,拓展功能也大幅提升,便于開(kāi)發(fā)者全面評(píng)估芯片性能。
若您想獲取芯片和開(kāi)發(fā)板的更多詳細(xì)信息,包括產(chǎn)品特性、技術(shù)參數(shù)以及價(jià)格等,歡迎訪問(wèn)官方網(wǎng)頁(yè):http://www.w5500.com/,我們期待與您共同探索W55MH32的無(wú)限可能。
第十四章 ADC(下篇)
1 例程設(shè)計(jì)
1.1 ADC_Double例程
這是一個(gè)基于 W55MH32 的 ADC(模擬 - 數(shù)字轉(zhuǎn)換器)雙模式測(cè)試?yán)獭K闹饕δ苁桥渲么?、ADC 和 DMA,并且通過(guò) ADC1 和 ADC2 同時(shí)對(duì)模擬信號(hào)進(jìn)行采樣,最后把采樣結(jié)果通過(guò)串口打印出來(lái)。下面是對(duì)這個(gè)例程的設(shè)計(jì)分析:
1.系統(tǒng)初始化
?配置系統(tǒng)時(shí)鐘、延時(shí)函數(shù)、串口、ADC 和 DMA。
?打印系統(tǒng)時(shí)鐘頻率信息。
2.ADC 雙模式采樣
?ADC1 和 ADC2 工作于規(guī)則同步模式,同時(shí)對(duì)通道 0 和通道 1 進(jìn)行采樣。
?轉(zhuǎn)換結(jié)果通過(guò) 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)換為電壓值并通過(guò)串口打印。
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例程
該例程是一個(gè)基于 W55MH32 微控制器的 ADC 單通道采樣程序,主要功能是周期性采集模擬輸入信號(hào)并通過(guò)串口輸出 ADC 值及其對(duì)應(yīng)的電壓。以下是詳細(xì)的工作流程總結(jié):
1.時(shí)鐘配置
?獲取系統(tǒng)各時(shí)鐘頻率(SYSCLK/HCLK/PCLK/ADCCLK),并通過(guò)串口打印。
2.UART 配置
?初始化 USART1 為 115200 波特率,用于串口輸出數(shù)據(jù)。
3.ADC 配置
?使能 ADC1 時(shí)鐘,配置 PA6 為模擬輸入模式。
?ADC 工作在獨(dú)立模式,禁用連續(xù)轉(zhuǎn)換,啟用掃描模式(單通道時(shí)僅觸發(fā)一次轉(zhuǎn)換)。
?執(zhí)行 ADC 校準(zhǔn)以確保精度。
void ADC_Configuration(void) { uint32_t i; ADC_InitTypeDef ADC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; // 使能 ADC1 和 GPIOA 時(shí)鐘 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 時(shí)鐘配置(PCLK2 的 1/8) RCC_ADCCLKConfig(RCC_PCLK2_Div8); ADC_DeInit(ADC1); // 復(fù)位 ADC1 // ADC 初始化配置 ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; // 獨(dú)立模式 ADC_InitStructure.ADC_ScanConvMode = ENABLE; // 啟用掃描模式(單通道時(shí)僅轉(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; // 右對(duì)齊 ADC_InitStructure.ADC_NbrOfChannel = CONV_CHANNEL_NUM; // 通道數(shù)(1) ADC_Init(ADC1, &ADC_InitStructure); // 配置 ADC 通道(通道 6,采樣時(shí)間 239.5 周期) for (i = 0; i < CONV_CHANNEL_NUM; i++) { ADC_RegularChannelConfig(ADC1, ADC_CovChannel[i], i + 1, ADC_SampleTIME[i]); } // 啟動(dòng) ADC 轉(zhuǎn)換并使能 ADC ADC_SoftwareStartConvCmd(ADC1, ENABLE); ADC_Cmd(ADC1, ENABLE); // ADC 校準(zhǔn) 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例程
該例程是一個(gè)基于 W55MH32 的 ADC 多通道采樣程序,主要用于同時(shí)采集內(nèi)部溫度傳感器和 VREFINT(內(nèi)部參考電壓)的模擬信號(hào),并通過(guò)串口輸出測(cè)量結(jié)果。以下是其主要工作流程如下:
1.系統(tǒng)初始化
a.UART 配置:初始化 USART1 為 115200 波特率,用于串口輸出。
b.ADC 配置:使能 ADC1 時(shí)鐘,配置為獨(dú)立模式,啟用掃描模式(多通道依次轉(zhuǎn)換)。
?配置通道 16(溫度傳感器)和通道 17(VREFINT),采樣時(shí)間 239.5 周期。
?校準(zhǔn) 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.延時(shí) 1 秒后重復(fù)觸發(fā),實(shí)現(xiàn)周期性采樣。
3.數(shù)據(jù)處理與輸出
void DMA1_Channel1_IRQHandler(void) { if (DMA_GetITStatus(DMA1_IT_TC1) != RESET) // 檢查傳輸完成中斷 { DMA_ClearITPendingBit(DMA1_IT_TC1); // 清除中斷標(biāo)志 DMA_ClearFlag(DMA1_FLAG_TC1); // 計(jì)算溫度傳感器和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 傳輸完成時(shí),觸發(fā)DMA1_Channel1_IRQHandler。
b.電壓計(jì)算:根據(jù)公式電壓 = VREF × ADC值 / 4095 / 1000 計(jì)算實(shí)際電壓值(VREF=3.3V)。
c.串口打印:輸出溫度傳感器和 VREFINT 的 ADC 值及電壓值。
2 下載驗(yàn)證
2.1 ADC_Double例程
程序運(yùn)行時(shí),ADC1和ADC2以規(guī)則同步模式周期性采樣兩個(gè)模擬通道(PA0和PA1),轉(zhuǎn)換結(jié)果通過(guò)DMA傳輸至內(nèi)存。每次DMA傳輸完成后觸發(fā)中斷,在中斷中計(jì)算并通過(guò)串口打印ADC1和ADC2的原始數(shù)值(12位)及對(duì)應(yīng)的電壓值(單位:V),顯示間隔由主循環(huán)中的1秒延時(shí)控制。系統(tǒng)啟動(dòng)時(shí)會(huì)輸出各時(shí)鐘頻率參數(shù),隨后每秒更新一次ADC數(shù)據(jù)。
2.2 ADC_Single例程
程序運(yùn)行時(shí),系統(tǒng)首先輸出各時(shí)鐘頻率參數(shù),隨后每秒觸發(fā)一次ADC1通道6(PA6)的模擬信號(hào)采樣。ADC轉(zhuǎn)換結(jié)果通過(guò)DMA自動(dòng)傳輸至內(nèi)存,每次DMA傳輸完成后觸發(fā)中斷,在中斷服務(wù)函數(shù)中計(jì)算并通過(guò)串口打印ADC原始值(12位)及對(duì)應(yīng)的電壓值(單位:V)。系統(tǒng)以1秒為間隔循環(huán)觸發(fā)采樣,實(shí)現(xiàn)周期性數(shù)據(jù)更新,最終在串口終端每秒顯示一次ADC數(shù)據(jù)。
2.3 ADC_VrefintTemper例程
程序運(yùn)行時(shí),系統(tǒng)首先輸出各時(shí)鐘頻率參數(shù),隨后每秒觸發(fā)一次ADC1通道16(內(nèi)部溫度傳感器)和通道17(VREFINT)的模擬信號(hào)采樣。ADC轉(zhuǎn)換結(jié)果通過(guò)DMA自動(dòng)傳輸至內(nèi)存,每次DMA傳輸完成后觸發(fā)中斷,在中斷服務(wù)函數(shù)中計(jì)算并通過(guò)串口打印兩個(gè)通道的ADC原始值(12位)及對(duì)應(yīng)的電壓值(單位:V)。系統(tǒng)以1秒為間隔循環(huán)觸發(fā)采樣,實(shí)現(xiàn)周期性數(shù)據(jù)更新,最終在串口終端每秒顯示一次內(nèi)部溫度傳感器和VREFINT的測(cè)量結(jié)果。
WIZnet 是一家無(wú)晶圓廠半導(dǎo)體公司,成立于 1998 年。產(chǎn)品包括互聯(lián)網(wǎng)處理器 iMCU?,它采用 TOE(TCP/IP 卸載引擎)技術(shù),基于獨(dú)特的專利全硬連線 TCP/IP。iMCU? 面向各種應(yīng)用中的嵌入式互聯(lián)網(wǎng)設(shè)備。
WIZnet 在全球擁有 70 多家分銷商,在香港、韓國(guó)、美國(guó)設(shè)有辦事處,提供技術(shù)支持和產(chǎn)品營(yíng)銷。
香港辦事處管理的區(qū)域包括:澳大利亞、印度、土耳其、亞洲(韓國(guó)和日本除外)。
審核編輯 黃宇
-
adc
+關(guān)注
關(guān)注
99文章
6689瀏覽量
549139
發(fā)布評(píng)論請(qǐng)先 登錄
視頻詳解:上海尤老師verilog入門(mén)到實(shí)戰(zhàn)第十四課
「正點(diǎn)原子Linux連載」第十四章蜂鳴器試驗(yàn)
第十四講 555定時(shí)器

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

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

評(píng)論