[蓝牙芯片] adc通道感觉是只转化了一次

[复制链接]
1619|1
VelvetVoyag 发表于 2025-9-13 13:49 | 显示全部楼层 |阅读模式
ADC, DMA, ST, ni, DM, ma
* Adc.c
*  Created on: 2025年9月12日
*/

#define  length  1
void adc_Init(void)//滤波  每个通道4.31微秒  整体约为25.86微秒
   GPIO_InitTypeDef GPIO_InitStructure={0};
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB  |RCC_APB2Periph_ADC1 , ENABLE ); //使能GPIOA时钟和ADC
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;   //
   GPIO_Init(GPIOB, &GPIO_InitStructure);

   ADC_InitStructure.ADC_ScanConvMode = ENABLE;        //多通道模式下开启扫描模式
   ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //设置转换不是由外部触发启动,软件触发启动
   ADC_InitStructure.ADC_NbrOfChannel = length;                //规则转换的ADC通道的数目
   ADC_Cmd(ADC1, ENABLE);      //使能ADC1

   while(ADC_GetResetCalibrationStatus(ADC1)); //等待复位校准结束

   while(ADC_GetCalibrationStatus(ADC1));      //等待校准结束
//ADC DMA模式配置
{
   RCC_AHBPeriphClockCmd( RCC_AHBPeriph_DMA1, ENABLE ); //使能开启DMA时钟

   DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)&ADC1->RDATAR;  //配置外设地址为ADC数据寄存器地址
   DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;              //配置数据源为外设,即DMA传输方式为外设到存储器
   DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//设置DMA外设递增模式关闭
   DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; //设置外设数据大小为半字,即两个字节
   DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;     //设置DMA模式为循环传输模式
   DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;        //因为此DMA传输方式为外设到存储器,因此禁用存储器到存储器传输方式
   DMA_Cmd(DMA1_Channel1 , ENABLE);  //使能DMA
void ADC_DMA_CONF(void)
   adc_Init();

   // 配置 ADC 通道转换顺序为1,第一个转换,采样时间为55.5个时钟周期
   // 使能ADC DMA 请求
   // 由于没有采用外部触发,所以使用软件触发ADC转换
}
之前用这个代码的时候测量的有好几个adc通道   能够刷新    这次只用了一个PB0通道  值感觉只有第一次上电时采集的那一个   我循环一秒打印一次值不变   重新上电后重新开始变一次   后面还是一样

WCHTECH75 发表于 2025-9-15 17:45 | 显示全部楼层
如果运行时使用到了蓝牙功能,蓝牙程序中温度校准rc会使用到adc功能,可以在HAL_GetInterTempValue函数的最下方添加你的adc初始化函数。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

54

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部