ADC_DMA
功能实现:ADC DMA方式循环采样。
采集周期:(256-192)*16*Tsys = (256-192)*16/62.4M = 16.5us
进中断周期:16.5us*采集数据的长度 = 16.5us
int main() { uint8_t i; signed short RoughCalib_Value = 0; // ADC粗调偏差值 uint32_t temp = 0; uint8_t adcchidx = 0; HSECFG_Capacitance(HSECap_18p); SetSysClock(CLK_SOURCE_HSE_PLL_62_4MHz); /* 配置串口调试 */ DebugInit(); PRINT("Start @ChipID=%02X\n", R8_CHIP_ID); GPIOA_ResetBits(GPIO_Pin_1); GPIOA_ModeCfg(GPIO_Pin_1, GPIO_ModeOut_PP_5mA); /* DMA单通道采样:选择adc通道0做采样,对应 PA4引脚 */ PRINT("\n3.Single channel DMA sampling...\n"); GPIOA_ModeCfg(GPIO_Pin_4, GPIO_ModeIN_Floating); ADC_ExtSingleChSampInit(SampleFreq_8_or_4, ADC_PGA_0); ADC_ChannelCfg(0); ADC_ExcutSingleConver();//时间足够时建议再次转换并丢弃首次ADC数据 ADC_AutoConverCycle(192); // 采样周期为 (256-192)*16个系统时钟 ADC_DMACfg(ENABLE, (uint32_t)&adcBuff[0], (uint32_t)&adcBuff[1], ADC_Mode_LOOP); PFIC_EnableIRQ(ADC_IRQn); ADC_StartAutoDMA(); while(1); } __INTERRUPT __HIGH_CODE void ADC_IRQHandler(void) //adc中断服务程序 { GPIOA_InverseBits(GPIO_Pin_1); if(ADC_GetDMAStatus()) { R32_ADC_DMA_BEG = ((uint32_t)adcBuff) & 0x1ffff; ADC_ClearDMAFlag(); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!