單芯片解決方案,開啟全新體驗——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的無限可能。
第十四章 ADC(下篇)
1 例程設計
1.1 ADC_Double例程
這是一個基于 W55MH32 的 ADC(模擬 - 數字轉換器)雙模式測試例程。它的主要功能是配置串口、ADC 和 DMA,并且通過 ADC1 和 ADC2 同時對模擬信號進行采樣,最后把采樣結果通過串口打印出來。下面是對這個例程的設計分析:
1.系統初始化
?配置系統時鐘、延時函數、串口、ADC 和 DMA。
?打印系統時鐘頻率信息。
2.ADC 雙模式采樣
?ADC1 和 ADC2 工作于規則同步模式,同時對通道 0 和通道 1 進行采樣。
?轉換結果通過 DMA 傳輸到內存緩沖區。
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); // 配置為規則同步模式 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.數據處理與輸出
?DMA 傳輸完成后觸發中斷,將 ADC 數字值轉換為電壓值并通過串口打印。
void DMA1_Channel1_IRQHandler(void) { if (DMA_GetITStatus(DMA1_IT_TC1) != RESET) { DMA_ClearITPendingBit(DMA1_IT_TC1); DMA_ClearFlag(DMA1_FLAG_TC1); // 數據處理與輸出 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 值及其對應的電壓。以下是詳細的工作流程總結:
1.時鐘配置
?獲取系統各時鐘頻率(SYSCLK/HCLK/PCLK/ADCCLK),并通過串口打印。
2.UART 配置
?初始化 USART1 為 115200 波特率,用于串口輸出數據。
3.ADC 配置
?使能 ADC1 時鐘,配置 PA6 為模擬輸入模式。
?ADC 工作在獨立模式,禁用連續轉換,啟用掃描模式(單通道時僅觸發一次轉換)。
?執行 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); // 復位 ADC1 // ADC 初始化配置 ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; // 獨立模式 ADC_InitStructure.ADC_ScanConvMode = ENABLE; // 啟用掃描模式(單通道時僅轉換一次) ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; // 禁用連續轉換,需軟件觸發 ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; // 軟件觸發 ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; // 右對齊 ADC_InitStructure.ADC_NbrOfChannel = CONV_CHANNEL_NUM; // 通道數(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 轉換并使能 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 配置
?設置 DMA1 通道 1 為循環模式,將 ADC 數據寄存器(ADC1->DR)的數據傳輸到內存數組DAM_ADC_Value。
?使能 DMA 傳輸完成中斷(TC 中斷),觸發數據處理。
1.3 ADC_VrefintTemper例程
該例程是一個基于 W55MH32 的 ADC 多通道采樣程序,主要用于同時采集內部溫度傳感器和 VREFINT(內部參考電壓)的模擬信號,并通過串口輸出測量結果。以下是其主要工作流程如下:
1.系統初始化
a.UART 配置:初始化 USART1 為 115200 波特率,用于串口輸出。
b.ADC 配置:使能 ADC1 時鐘,配置為獨立模式,啟用掃描模式(多通道依次轉換)。
?配置通道 16(溫度傳感器)和通道 17(VREFINT),采樣時間 239.5 周期。
?校準 ADC 并使能內部溫度傳感器和 VREFINT。
ADC_InitStructure.ADC_ScanConvMode = ENABLE; // 啟用掃描模式,多通道依次轉換 ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; // 禁用連續轉換,需軟件觸發 ADC_TempSensorVrefintCmd(ENABLE); // 使能內部溫度傳感器和VREFINT
c.DMA 配置:設置 DMA1 通道 1 為循環模式,將 ADC 數據寄存器(ADC1->DR)的數據傳輸到內存數組DAM_ADC_Value。
?使能 DMA 傳輸完成中斷(TC 中斷)。
2.主循環邏輯
a.每秒調用ADC_SoftwareStartConvCmd(ADC1, ENABLE)觸發 ADC 轉換。
b.延時 1 秒后重復觸發,實現周期性采樣。
3.數據處理與輸出
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電壓 // 串口輸出結果 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 中斷處理:當 DMA 傳輸完成時,觸發DMA1_Channel1_IRQHandler。
b.電壓計算:根據公式電壓 = VREF × ADC值 / 4095 / 1000 計算實際電壓值(VREF=3.3V)。
c.串口打印:輸出溫度傳感器和 VREFINT 的 ADC 值及電壓值。
2 下載驗證
2.1 ADC_Double例程
程序運行時,ADC1和ADC2以規則同步模式周期性采樣兩個模擬通道(PA0和PA1),轉換結果通過DMA傳輸至內存。每次DMA傳輸完成后觸發中斷,在中斷中計算并通過串口打印ADC1和ADC2的原始數值(12位)及對應的電壓值(單位:V),顯示間隔由主循環中的1秒延時控制。系統啟動時會輸出各時鐘頻率參數,隨后每秒更新一次ADC數據。
2.2 ADC_Single例程
程序運行時,系統首先輸出各時鐘頻率參數,隨后每秒觸發一次ADC1通道6(PA6)的模擬信號采樣。ADC轉換結果通過DMA自動傳輸至內存,每次DMA傳輸完成后觸發中斷,在中斷服務函數中計算并通過串口打印ADC原始值(12位)及對應的電壓值(單位:V)。系統以1秒為間隔循環觸發采樣,實現周期性數據更新,最終在串口終端每秒顯示一次ADC數據。
2.3 ADC_VrefintTemper例程
程序運行時,系統首先輸出各時鐘頻率參數,隨后每秒觸發一次ADC1通道16(內部溫度傳感器)和通道17(VREFINT)的模擬信號采樣。ADC轉換結果通過DMA自動傳輸至內存,每次DMA傳輸完成后觸發中斷,在中斷服務函數中計算并通過串口打印兩個通道的ADC原始值(12位)及對應的電壓值(單位:V)。系統以1秒為間隔循環觸發采樣,實現周期性數據更新,最終在串口終端每秒顯示一次內部溫度傳感器和VREFINT的測量結果。
WIZnet 是一家無晶圓廠半導體公司,成立于 1998 年。產品包括互聯網處理器 iMCU?,它采用 TOE(TCP/IP 卸載引擎)技術,基于獨特的專利全硬連線 TCP/IP。iMCU? 面向各種應用中的嵌入式互聯網設備。
WIZnet 在全球擁有 70 多家分銷商,在香港、韓國、美國設有辦事處,提供技術支持和產品營銷。
香港辦事處管理的區域包括:澳大利亞、印度、土耳其、亞洲(韓國和日本除外)。
審核編輯 黃宇
-
adc
+關注
關注
99文章
6635瀏覽量
548215
發布評論請先 登錄
視頻詳解:上海尤老師verilog入門到實戰第十四課
「正點原子Linux連載」第十四章蜂鳴器試驗
模擬電路網絡課件 第十四節:放大電路的頻率響應

PinTech品致第十四屆中國高校電力電子與電力傳動學術年會
【北京迅為】iTOP-i.MX6開發板使用手冊第四部分固件編譯第十四章非設備樹Android4.4系統編譯

評論