项目简介
任务:通过CubeMx实现ADC多通道扫描采集DMA方式(无中断) 采集内部温度传感器的温度
通道:采集A0、A1、A2、B0、B1端口电压,
采集内部温度传感器通道16、内部电压通道17
显示方式:通过串口1打印显示
开发环境:STM32CubeMx 5.4.0+Keil 5.28
下载方式:ST_LINK V2
项目内容
CubeMx配置
配置开启外部高速时钟振荡源HSE
配置串行调试下载方式Serial Wire
配置串口1为异步模式,其余参数默认,无需中断
配置ADC1
注意:DMA中断已被强制打开
时钟树配置
源代码配置:
添加头文件:
#include "stdio.h"
变量定义:
uint8_t Uart1_TX_buffer[30];//串口1发送缓冲数组
uint16_t AdcValue[7]; //DMA传输ADC采集值变量内存数组
float temperature = 0; //CPU内部温度
float Vref = 0; //参考电压
串口重定义函数:
/***********************************
@function:串口1的重定义,使用标准C的输入输出函数
@parameter:void
@return:void
@date:2020-2-7
note:头文件stdio.h
***********************************/
int fputc(int ch,FILE *f)
{
uint8_t temp[1] = {ch};
HAL_UART_Transmit(&huart1,temp,1,2);
return(ch);
}
主函数代码:
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_DMA_Init();
MX_ADC1_Init();
MX_USART1_UART_Init();
/* USER CODE BEGIN 2 */
HAL_ADCEx_Calibration_Start(&hadc1); //AD校准
HAL_NVIC_DisableIRQ(DMA1_Channel1_IRQn);//注意:防止反复进入DMA中断
HAL_ADC_Start_DMA(&hadc1,(uint32_t *)AdcValue,7);
HAL_UART_AbortTransmit(&huart1);
printf("串口1就绪\r\n");
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_Delay(100);
Vref = AdcValue[6];
Vref = 1.2 / Vref;
temperature = AdcValue[5];
temperature = Vref*temperature;
temperature = (1.43 - temperature)/0.0043 + 25;
printf("A0=%0.2fv\tA1=%0.2fv\tA2=%0.2fv\tB0=%0.2fv\tB1=%0.2fv\t%0.1f℃\r\n",Vref*(float)(AdcValue[0]),Vref*(float)(AdcValue[1]),Vref*(float)(AdcValue[2]),Vref*(float)(AdcValue[3]),Vref*(float)(AdcValue[4]),temperature);
}
/* USER CODE END 3 */
}
项目效果:
硬件设备:
原理图:
不动遥杆采集值:
操作摇杆后的值:
项目结束语:
本篇文章只涉及使用CubeMx项目配置方法,后面将会写一篇对本篇文章的项目配置代码进行讲解。由于笔者能力有限,如有错误请指出,不足之处还望见谅。加油2020年!