CubeMX配合PlatformIO开发STM32(STorM32),配置ADC实现电池电压检测

本人使用的设备/驱动:

  • Windows10
  • 串口助手 4.3.25(其实啥都行)
  • 桃饱随处可买的usb-ttl(ch340G)
  • 桃饱随处可买的stlink
  • cubeMX 5.6.1
  • PlatformIO
  • stm32f103rct6的stormBGC

使用stm32f103rct6,准备使用ADC实现电池电压检测

本文直接从项目中加入相关功能说起,环境以及其他外设配置:

使用ST-LINK utility将单片机中的程序下载下来

CubeMX配合PlatformIO开发STM32,配置环境,点亮LED灯

CubeMX配合PlatformIO开发STM32,配置usart实现串口通讯

CubeMX配合PlatformIO开发STM32,配置ADC实现电池电压检测

CubeMX配合PlatformIO开发STM32,配置MPU6050(I2C)

CubeMX配合PlatformIO开发STM32,配置双MPU6050(板载与外置),并使用gui显示数据

CubeMX配合PlatformIO开发STM32,通过系统时钟(systick)中断让不同功能代码以不同频率执行,计算计算所花时间

CubeMX配合PlatformIO开发STM32,实现pid算法控制电机的转角

CubeMX配合PlatformIO开发STM32,配置定时器,实现SPWM算法控制电机

CubeMX配合PlatformIO开发STM32,配置uart中断,配合python的gui在线调参

正文

 

查询原理图,可知使用PA5引脚检测分压过的电池电压信号:

CubeMX配合PlatformIO开发STM32(STorM32),配置ADC实现电池电压检测_第1张图片

CubeMX配合PlatformIO开发STM32(STorM32),配置ADC实现电池电压检测_第2张图片

在CubeMX中选择PA5引脚,选择GPIO_analog,并设置为ADC2_IN5

CubeMX配合PlatformIO开发STM32(STorM32),配置ADC实现电池电压检测_第3张图片

然后在clock configuration中将adc时钟信号更改至9MHz

CubeMX配合PlatformIO开发STM32(STorM32),配置ADC实现电池电压检测_第4张图片

然后打开pio,添加adc临时存储变量:

/* USER CODE BEGIN PV */
uint16_t ADC2_Value = 0;
/* USER CODE END PV */

在while中加入:

HAL_ADC_Start(&hadc2);//Start ADC conversion
HAL_ADC_PollForConversion(&hadc2, 50);//表示等待转换完成,第二个参数表示超时时间,单位ms.

/* Check if the continous conversion of regular channel is finished */    
if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc2), HAL_ADC_STATE_REG_EOC)) //换取ADC状态,HAL_ADC_STATE_REG_EOC表示转换完成标志位,转换数据可用
    {
    /*##-3- Get the converted value of regular channel  ######################*/
    ADC2_Value = HAL_ADC_GetValue(&hadc2);//获取ADC测量值
    printf("Voltage: %1.3f V \r\n",ADC2_Value*0.0061767578125); //分压还原0.00617=3.3/4096*11.5/1.5
    }

但是这个时候还不能通过printf来串口打印代码,因为默认的printf是打印到屏幕上的,我们要重定向到串口

打开usart.c,拉到最下方,在用户自定代码中添加:

/* USER CODE BEGIN 1 */
#ifdef __GNUC__
  /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
     set to 'Yes') calls __io_putchar() */
  #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
  #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */
/**
  * @brief  Retargets the C library printf function to the USART.
  * @param  None
  * @retval None
  */
PUTCHAR_PROTOTYPE
{
  /* Place your implementation of fputc here */
  /* e.g. write a character to the EVAL_COM1 and Loop until the end of transmission */
  HAL_UART_Transmit(&huart3, (uint8_t *)&ch, 1, 0xFFFF);
 
  return ch;
}
/* USER CODE END 1 */

这个时候就重定向完成了。

但是这个时候烧录的话,你会发现无法打印浮点数(

打开platform.ini添加

; for printf float 
build_flags = -Wl,-u,_printf_float,-u,_scanf_float

CubeMX配合PlatformIO开发STM32(STorM32),配置ADC实现电池电压检测_第5张图片

这个时候烧录,就可以在串口得到浮点数输出了

CubeMX配合PlatformIO开发STM32(STorM32),配置ADC实现电池电压检测_第6张图片

你可能感兴趣的:(stm32,单片机,嵌入式,pio)