|
//常规转换序列1:通道10 对应电位器 //常规转换序列2:通道16(内部温度传感器) #========================================================== defineADC1_DR_Address ((u32)0x4001244C) vu16 AD_Value[2]; ============================================================== 关键代码 voidADC1_Configuration(void) { ADC_InitTypeDef ADC_InitStructure; ADC_InitStructure.ADC_Mode =ADC_Mode_Independent;//独立工作模式 ADC_InitStructure.ADC_ScanConvMode =ENABLE;//扫描方式 ADC_InitStructure.ADC_ContinuousConvMode =ENABLE; //连续转换开启 ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//外部触发禁止 ADC_InitStructure.ADC_DataAlign =ADC_DataAlign_Right;//右对齐方式 ADC_InitStructure.ADC_NbrOfChannel =2; //设置转换序列长度为2 ADC_Init(ADC1, &ADC_InitStructure);//调用函数,初始化ADC1 //ADC内置温度传感器使能(要使用片内温度传感器,切忌要开启它) ADC_TempSensorVrefintCmd(ENABLE); //常规转换序列1:通道10 ADC_RegularChannelConfig(ADC1,ADC_Channel_10, 1, ADC_SampleTime_13Cycles5); //常规转换序列2:通道16(内部温度传感器),采样时间>2.2us,(239cycles) ADC_RegularChannelConfig(ADC1, ADC_Channel_16,2, ADC_SampleTime_239Cycles5); // Enable ADC1 ADC_Cmd(ADC1, ENABLE); // 开启ADC的DMA支持(要实现DMA功能,还需独立配置DMA通道等参数) ADC_DMACmd(ADC1, ENABLE); // 下面是ADC自动校准,开机后需执行一次,保证精度 // Enable ADC1 reset calibaration register ADC_ResetCalibration(ADC1); // Check the end of ADC1 reset calibrationregister while(ADC_GetResetCalibrationStatus(ADC1)); // Start ADC1 calibaration ADC_StartCalibration(ADC1); // Check the end of ADC1 calibration while(ADC_GetCalibrationStatus(ADC1)); // ADC自动校准结束--------------- } /******************************************************************************* * Function Name MA_Configuration* Description : DMA设置:从ADC模块自动读转换结果至内存 * Input : None * Output : None * Return : None *******************************************************************************/ voidDMA_Configuration(void) { DMA_InitTypeDef DMA_InitStructure; DMA_DeInit(DMA1_Channel1); DMA_InitStructure.DMA_PeripheralBaseAddr =ADC1_DR_Address;//外设地址 DMA_InitStructure.DMA_MemoryBaseAddr =(u32)&AD_Value;//内存地址/*自己开辟的数组*/ DMA_InitStructure.DMA_DIR =DMA_DIR_PeripheralSRC;//DMA单向传输方式 //BufferSize=2,因为ADC转换序列有2个通道 //如此设置,使序列1结果放在AD_Value[0],序列2结果放在AD_Value[1] DMA_InitStructure.DMA_BufferSize = 2; DMA_InitStructure.DMA_PeripheralInc =DMA_PeripheralInc_Disable;//设置DMA外设递增模式 DMA_InitStructure.DMA_MemoryInc =DMA_MemoryInc_Enable; //设置DMA内存递增模式 DMA_InitStructure.DMA_PeripheralDataSize =DMA_PeripheralDataSize_HalfWord;//外设字长 DMA_InitStructure.DMA_MemoryDataSize =DMA_MemoryDataSize_HalfWord;//内存地址 //循环模式开启,Buffer写满后,自动回到初始地址开始传输 DMA_InitStructure.DMA_Mode =DMA_Mode_Circular; // 设置传输模式连续不断的循环模式 DMA_InitStructure.DMA_Priority =DMA_Priority_High;//设置DMA优先级 DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;// 设置DMA的2个memory中的变量互相访问 DMA_Init(DMA1_Channel1,&DMA_InitStructure); //配置完成后,启动DMA通道 DMA_Cmd(DMA1_Channel1, ENABLE); } |
STM32
超强工具——STM32CubeMX 你会用吗?
集结出发! STM32全国研讨会系列之一:ST智能门铃中国首秀
关于STM32启动文件的几个小问题
【银杏科技ARM+FPGA双核心应用】STM32H7系列35——USB_VCP_FS
【银杏科技ARM+FPGA双核心应用】STM32H7系列28——USB_HID
粉丝分享 | 图说CRC原理应用及STM32硬件CRC外设
STM32L151进入低功耗,并由RTC唤醒的故事
[转]stm32控制NFC模块(PN532)源码(P2P,模拟卡,读写卡等
STM32G070RB+LVGL移植
微信公众号
手机版