STM32F407ZG 检测环境温度 CubeIDE

Background Information

STM32F40x和STM32F41x芯片内部自动集成了温度传感器,连接到ADC1通道16。

串口1集成了CH340G芯片,所以可以直接和PA9,PA10通讯,用别的串口的话要额外买CH340模块,CH340的接收端连接单片机发送端,发送端连接单片机接收端。

在adc.c中MX_ADC1_Init中加入HAL_ADC_Start_IT(&hadc1);  如果把它加在main函数里要放在MX_ADC1_Init();之后。

重写callback函数。

ADC多通道采集一般用DMA,因为DMA有一个缓冲区,把ADC转换采集到的数据放进缓冲区。

IN1作为光敏电阻通道,IN16位温度传感器。

在DMA中添加ADC1,因为我们转换16位,而单片机为32位,所以data width选择half word(十六位)。要注意到时设置变量要设置uint16_t变量。然后DMA Continuous Requests Enabled. Scan Conversion Mode 使能。Coninuous Conversion Mode Enabled.  End Of Conversion Selection等所有通道转换完再结束。在ADC_Regular_ConversionMode中选择两个通道,然后排序。温度排序1采样周期480Cycles, Channel1排序2采样周期480Cycles.记得不要勾选中断。

DMA Settings模式选Circular.

定义全局变量uint16_t ADC_Value[2] = {0};(长度为2的数组因为只有两个通道)

直接在main函数中调用HAL_ADC_Start_DMA(&hadc1, ADC_Value, 2);

Result:

Code:

/* USER CODE BEGIN Includes */
uint16_t ADC_Value = 0;
double V_sense = 0;
double C = 0;
double F = 0;
/* USER CODE END Includes */

int main(void)
{
  /* USER CODE BEGIN 1 */
	uint8_t buff[1024] = {0};
  /* USER CODE END 1 */
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_ADC1_Init();
  MX_USART1_UART_Init();
  while (1)
  {
        /* USER CODE BEGIN 3 */
	  V_sense = ADC_Value/4096.0*3.3;
	  C = (V_sense - 0.76)/0.0025 + 25.0;
	  F = C * 1.8 + 32.0;
	  sprintf(buff, "V = %.3f V C = %.3f degree F = %.3f degree\r\n", V_sense, C, F);
	  HAL_UART_Transmit(&huart1, buff, strlen(buff), 5000);
	  HAL_Delay(500);
  }
  /* USER CODE END 3 */
}

/* USER CODE BEGIN 4 */
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{
  if(hadc == &hadc1){
	  ADC_Value = HAL_ADC_GetValue(hadc);
  }
}
/* USER CODE END 4 */

 

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

GiaG*

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

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

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

打赏作者

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

抵扣说明:

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

余额充值