完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
//初始化函数
void ADC_Periph_Init(void) { u8 idx; CLK_PeripheralClockConfig(CLK_Peripheral_ADC1, ENABLE);//使能ADC时钟 CLK_PeripheralClockConfig(CLK_Peripheral_DMA1, ENABLE);//使能DMA1时钟 GPIO_Init(GPIOB,GPIO_Pin_5,GPIO_Mode_In_FL_No_IT);//浮空输入 ADC_Cmd(ADC1,ENABLE);//打开ADC for (idx = 0;idx < 50;idx++);//adc上电需要一段时间 ADC_VrefintCmd(ENABLE);//使能内部参考电压 ADC_DMACmd(ADC1,ENABLE);//使用ADC的DMA功能 //连续转换模式 ADC_Init(ADC1, ADC_ConversionMode_Continuous,ADC_Resolution_12Bit, ADC_Prescaler_1); //ADC_SamplingTimeConfig(ADC1, ADC_Group_FastChannels, ADC_SamplingTime_192Cycles); //ADC_SamplingTimeConfig(ADC1, ADC_Group_SlowChannels,ADC_SamplingTime_192Cycles); ADC_SamplingTimeConfig(ADC1, ADC_Group_SlowChannels, ADC_SamplingTime_384Cycles); ADC_ChannelCmd(ADC1, ADC_Channel_Vrefint, ENABLE);//内部参考电压 ADC_ChannelCmd(ADC1, ADC_Channel_13, ENABLE);//通道13 PB5 SYSCFG_REMAPDMAChannelConfig(REMAP_DMA1Channel_ADC1ToChannel0); DMA_Init(DMA1_Channel0,//通道0 (uint32_t) ADC_ConvertedValue,//缓冲区地址 (uint16_t)ADC1_DR_Address,//ADC数据寄存器地址 DMA_BUF_SIZE,//缓冲区大小 DMA_DIR_PeripheralToMemory,//外设到内存 DMA_Mode_Circular,//循环转换 DMA_MemoryIncMode_Inc,//内存地址自增 DMA_Priority_High,//优先级为高 DMA_MemoryDataSize_HalfWord);//内存数据是半字位宽 DMA_SetCurrDataCounter(DMA1_Channel0,DMA_BUF_SIZE);//设置转速的数据个数 DMA_ITConfig(DMA1_Channel0,DMA_ITx_TC, ENABLE);//使能传输完成中断 DMA_ITConfig(DMA1_Channel0,DMA_ITx_HT, DISABLE); DMA_Cmd(DMA1_Channel0,ENABLE);//使能通道0 DMA_GlobalCmd(ENABLE);//打开DMA ADC_SoftwareStartConv(ADC1);//software trigger } //DMA中断 INTERRUPT_HANDLER(DMA1_CHANNEL0_1_IRQHandler,2) {uint16_t *p; /* In order to detect unexpected events during development, it is recommended to set a breakpoint on the following instruction. */ if(DMA_GetITStatus(DMA1_IT_TC0) != RESET) { p= ADC_ConvertedValue[0]; Data_Pack_handle(p); DMA_ClearITPendingBit(DMA1_IT_TC0); } } //数据打包函数。 void Data_Pack_handle(uint16_t *P_DMA_data) {uint8_t i; for(i=0;i |
|
相关推荐
1个回答
|
|
您好!看起来您正在使用STM8L151K4微控制器进行ADC采样,并希望了解如何初始化ADC。以下是您提供的初始化函数的详细解释:
1. `CLK_PeripheralClockConfig(CLK_Peripheral_ADC1, ENABLE);`:这行代码启用了ADC1的时钟。在进行ADC采样之前,需要确保ADC的时钟已经开启。 2. `CLK_PeripheralClockConfig(CLK_Peripheral_DMA1, ENABLE);`:这行代码启用了DMA1的时钟。DMA(Direct Memory Access)是一种硬件特性,可以允许外设直接与内存进行数据传输,而不需要CPU干预。在ADC采样过程中,可以使用DMA来提高数据传输的效率。 3. `GPIO_Init(GPIOB,GPIO_Pin_5,GPIO_Mode_In_FL_No_IT);`:这行代码配置了GPIOB的第5个引脚(PB5)为浮空输入模式。这意味着该引脚将作为ADC的输入通道。 4. `ADC_Cmd(ADC1,ENABLE);`:这行代码启用了ADC1模块。 5. `for (idx = 0; idx < 50; idx++);`:这个循环提供了一个延时,以确保ADC模块在上电后有足够的时间稳定。通常,ADC模块在上电后需要一段时间来稳定其内部参数。 6. `ADC_VrefintCmd(ENABLE);`:这行代码启用了内部参考电压。在进行ADC采样时,需要一个参考电压来确定模拟信号的量化级别。 在完成这些初始化步骤后,您可以开始配置ADC的采样参数,例如采样速率、分辨率等。然后,您可以启动ADC采样过程,并使用DMA将采样数据传输到内存中。 如果您有任何关于STM8L151K4 ADC采样的问题或需要进一步的帮助,请随时提问。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1771 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1619 浏览 1 评论
1070 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
724 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1673 浏览 2 评论
1935浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
728浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
567浏览 3评论
593浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
551浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 11:01 , Processed in 0.890889 second(s), Total 80, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号