STM32 CubeMx LL库-ADC操作

这篇博客介绍了如何使用STM32CubeMxLL库配置ADC和串口进行电压测量。通过配置ADC1初始化、设置通道、启动转换并读取数据,实现对PB0引脚电压的测量。同时,利用串口发送ADC测量的平均电压值。测试结果显示,当PB0悬空时,电压约为1600mV,并能响应低电平脉冲。代码中还包含了中断使能和ADC校准等细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

STM32 CubeMx LL库-ADC操作

硬件选型
stm32f103c8t6
USB-TTL
关于STM32的ADC介绍这里有时间再补充,直接进入代码编写。

1. CubeMx-ADC配置
在这里插入图片描述
2. CubeMx-USART1配置
在这里插入图片描述
3. CubeMx-RCC配置
在这里插入图片描述4. 代码
a)ADC初始化配置,后面需要自行添加相关代码

void MX_ADC1_Init(void)
{

  /* USER CODE BEGIN ADC1_Init 0 */

  /* USER CODE END ADC1_Init 0 */

  LL_ADC_InitTypeDef ADC_InitStruct = {0};
  LL_ADC_CommonInitTypeDef ADC_CommonInitStruct = {0};
  LL_ADC_REG_InitTypeDef ADC_REG_InitStruct = {0};

  LL_GPIO_InitTypeDef GPIO_InitStruct = {0};

  /* Peripheral clock enable */
  LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_ADC1);

  LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOB);
  /**ADC1 GPIO Configuration
  PB0   ------> ADC1_IN8
  */
  GPIO_InitStruct.Pin = LL_GPIO_PIN_0;
  GPIO_InitStruct.Mode = LL_GPIO_MODE_ANALOG;
  LL_GPIO_Init(GPIOB, &GPIO_InitStruct);

  /* USER CODE BEGIN ADC1_Init 1 */

  /* USER CODE END ADC1_Init 1 */
  /** Common config
  */
  ADC_InitStruct.DataAlignment = LL_ADC_DATA_ALIGN_RIGHT;
  ADC_InitStruct.SequencersScanMode = LL_ADC_SEQ_SCAN_DISABLE;
  LL_ADC_Init(ADC1, &ADC_InitStruct);
  ADC_CommonInitStruct.Multimode = LL_ADC_MULTI_INDEPENDENT;
  LL_ADC_CommonInit(__LL_ADC_COMMON_INSTANCE(ADC1), &ADC_CommonInitStruct);
  ADC_REG_InitStruct.TriggerSource = LL_ADC_REG_TRIG_SOFTWARE;
  ADC_REG_InitStruct.SequencerLength = LL_ADC_REG_SEQ_SCAN_DISABLE;
  ADC_REG_InitStruct.SequencerDiscont = LL_ADC_REG_SEQ_DISCONT_DISABLE;
  ADC_REG_InitStruct.ContinuousMode = LL_ADC_REG_CONV_CONTINUOUS;
  ADC_REG_InitStruct.DMATransfer = LL_ADC_REG_DMA_TRANSFER_NONE;
  LL_ADC_REG_Init(ADC1, &ADC_REG_InitStruct);
  /** Configure Regular Channel
  */
  LL_ADC_REG_SetSequencerRanks(ADC1, LL_ADC_REG_RANK_1, LL_ADC_CHANNEL_8);
  LL_ADC_SetChannelSamplingTime(ADC1, LL_ADC_CHANNEL_8, LL_ADC_SAMPLINGTIME_239CYCLES_5);
  /* USER CODE BEGIN ADC1_Init 2 */
/*以下代码不能自己生成,需要自行添加*/
//  LL_ADC_EnableIT_EOS(ADC1); //使能ADC中断
	LL_ADC_Enable(ADC1); //使能ADC
	LL_ADC_StartCalibration(ADC1);//开始校准ADC1 
	while(LL_ADC_IsCalibrationOnGoing(ADC1)); //等待ADC校准完成

  /* USER CODE END ADC1_Init 2 */
}

b)ADC初始化配置

/*设置ADC通道*/
float ADC1_GetVolValue(uint32_t ch)
{
	  uint16_t ADC_Value;
    float ADC_VolValue;
	  LL_ADC_REG_SetSequencerRanks(ADC1,LL_ADC_REG_RANK_1,ch); //设置规则序列1,设置通道
	  LL_ADC_REG_StartConversionSWStart(ADC1); //启动规则转换通道
		while(!LL_ADC_IsActiveFlag_EOS(ADC1)){};//等待转换结束	
	  ADC_Value=LL_ADC_REG_ReadConversionData12(ADC1);
    ADC_VolValue =(float)ADC_Value/4096*3.3;
    return ADC_VolValue;
}
/*计算平均值*/
float ADC_GetAverage(uint8_t time)
{
  uint8_t i;
	float ADC_Sum,	ADC_Average;
	for(i=0;i<time;i++)
	ADC_Sum=ADC_Sum+ADC1_GetVolValue(LL_ADC_CHANNEL_8);
	ADC_Average=ADC_Sum/time;
	return ADC_Average;
}

c) 串口代码

void Usart1Tran(uint8_t SendData)
{
	while(!LL_USART_IsActiveFlag_TXE(USART1)); //防止数据帧第一个字节丢失
	LL_USART_TransmitData8(USART1,SendData);
	while(!LL_USART_IsActiveFlag_TC(USART1)); //等待发送完成
}
void Usart1TrN(uint8_t * SendData, uint8_t len)
{
    uint8_t i;
	for(i=0;i<len;i++)
	{
	  Usart1Tran(SendData[i]);
	}
}

d)主函数测试

  while (1)
  {
		LL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);
//		ADC_VolValue=ADC1_GetVolValue(LL_ADC_CHANNEL_8);
		ADC_Average=ADC_GetAverage(10);
//		sprintf((char *)Tr,"The value is %.2f mV\r\n",ADC_VolValue*1000);
		sprintf((char *)Tr,"%.2f\r\n",ADC_Average*1000);
		Usart1TrN(Tr,25);
		for(i=0;i<25;i++) //清空串口数据缓存
		{
		  Tr[i]=0;
		}
		LL_mDelay(10);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }

5. 测试结果展示
在这里插入图片描述PB0悬空时,电压大约为1600mV,给引脚脉冲低电平,信号测试效果还可以。今天的STM32 CubeMx LL库关于ADC的展示就到这里啦!!!欢迎大家指正交流!!!
STM32 CubeMx LL库-ADC操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Flash*强

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值