关键词:
STM32F103VET6基于STM32CubeMX 配置DMA方式获取内部温度
- 🎬STM32CubeMX 参数配置演示(没有包含串口1的配置内容)
🚩请注意:以演示中没有展现串口1的开启演示过程,需要自己勾选
USART1
STM32CubeMX 配置解析
- 内部温度和参考电压都属于独占一个通道。
- 参数设置
对应的初始化函数代码:
void MX_ADC1_Init(void)
/* USER CODE BEGIN ADC1_Init 0 */
/* USER CODE END ADC1_Init 0 */
ADC_ChannelConfTypeDef sConfig = 0;
/* USER CODE BEGIN ADC1_Init 1 */
/* USER CODE END ADC1_Init 1 */
/** Common config
*/
hadc1.Instance = ADC1;//ADC工作模式:ADC1和ADC2工作在独立模式
hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;//在单通道下,禁止扫描模式
hadc1.Init.ContinuousConvMode = ENABLE;//使能连续转换
hadc1.Init.DiscontinuousConvMode = DISABLE;//模数模式工作在单次转换模式
hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;//转换由软件启动
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;//ADC数据右对齐
hadc1.Init.NbrOfConversion = 1;//转换ADC通道的数目
if (HAL_ADC_Init(&hadc1) != HAL_OK)
Error_Handler();
/** Configure Regular Channel
*/
sConfig.Channel = ADC_CHANNEL_TEMPSENSOR;
sConfig.Rank = ADC_REGULAR_RANK_1;
sConfig.SamplingTime = ADC_SAMPLETIME_55CYCLES_5;//转换时间
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
Error_Handler();
/* USER CODE BEGIN ADC1_Init 2 */
/* USER CODE END ADC1_Init 2 */
void HAL_ADC_MspInit(ADC_HandleTypeDef* adcHandle)
if(adcHandle->Instance==ADC1)
/* USER CODE BEGIN ADC1_MspInit 0 */
/* USER CODE END ADC1_MspInit 0 */
/* ADC1 clock enable */
__HAL_RCC_ADC1_CLK_ENABLE();
/* ADC1 DMA Init */
/* ADC1 Init */
hdma_adc1.Instance = DMA1_Channel1;//DMA通道
hdma_adc1.Init.Direction = DMA_PERIPH_TO_MEMORY;//从外设到储存区
hdma_adc1.Init.PeriphInc = DMA_PINC_DISABLE;
hdma_adc1.Init.MemInc = DMA_MINC_ENABLE;
hdma_adc1.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;//外设数据长度
hdma_adc1.Init.MemDataAlignment = DMA_MDATAALIGN_WORD;//储存数据长度
hdma_adc1.Init.Mode = DMA_CIRCULAR;//循环传输模式
hdma_adc1.Init.Priority = DMA_PRIORITY_LOW;//优先级
if (HAL_DMA_Init(&hdma_adc1) != HAL_OK)
Error_Handler();
__HAL_LINKDMA(adcHandle,DMA_Handle,hdma_adc1);
/* ADC1 interrupt Init */
HAL_NVIC_SetPriority(ADC1_2_IRQn, 0, 0);//优先级分组
HAL_NVIC_EnableIRQ(ADC1_2_IRQn);
/* USER CODE BEGIN ADC1_MspInit 1 */
/* USER CODE END ADC1_MspInit 1 */
📖业务代码补充
- 在main.c中添加有关宏和变量定义
/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */
//对于12位的ADC,3.3V的ADC值为0xfff,温度为25度时对应的电压值为1.43V即0x6EE
#define V25 0x6EE
// 每摄氏度4.3mV 对应每摄氏度0x05
#define AVG_SLOPE 0x05
/* USER CODE END PM */
/* Private variables ---------------------------------------------------------*/
/* USER CODE BEGIN PV */
uint32_t ADC_Value,Current_Temp;
float ADC_ConvertedValueLocal,Temperature;
/* USER CODE END PV */
- 🌿在main.c中的主函数main中开启ADC DMA转换
HAL_ADCEx_Calibration_Start(&hadc1);//开启ADC前对ADC进行校准
HAL_ADC_Start_DMA(&hadc1, (uint32_t*)&ADC_Value, 1);//开启DMA转换
- 🌿在usart.c中添加printf重映射代码,并且在
target
选项中勾选Use Micro LIB
选项。在使用printf
函数的地方包含stdio.h头文件。
/* USER CODE BEGIN 1 */
#include <stdio.h>
int fputc(int ch,FILE *f)
uint32_t temp = ch;
HAL_UART_Transmit(&huart1,(uint8_t *)&temp,1,0xFFFF); //huart1是串口的句柄
HAL_Delay(2);
return ch;
/* USER CODE END 1 */
- 🌿在主循环while中添加信息输出
HAL_Delay(1000);
Current_Temp=(V25 - ADC_Value)/AVG_SLOPE + 25;//计算方法1
ADC_ConvertedValueLocal =(float) ADC_Value/4096*3.3;//实际电压值
Temperature = (1.43 - ADC_Value*3.3/4096)/0.0043 + 25 ;//计算方法2
printf("The Current AD_value : %u \\r\\n",ADC_Value);
printf("voltage: %.1fV \\r\\n",ADC_ConvertedValueLocal);//实际电压值
printf("MCU Temperature:%.2f ℃,Current_Temp=%u \\r\\n", Temperature,Current_Temp);
- ✅串口打印信息
🌼工程源码
链接:https://pan.baidu.com/s/1HlLTlvS21Hyk8PuwCG_5vQ
提取码:gc70
stm32f103vet6基于stm32cubemx配置非dma方式获取内部温度(代码片段)
STM32F103VET6基于STM32CubeMX配置非DMA方式获取内部温度📌相关篇《STM32F103VET6基于STM32CubeMX配置DMA方式获取内部温度》🛠STM32CubeMX配置🌿勾选温度传感器通道。🌿参数配置选项参考上图。🌿配置串口1作为温度信息... 查看详情
stm32f103vet6基于stm32cubemx配置dma方式获取内部温度(代码片段)
STM32F103VET6基于STM32CubeMX配置DMA方式获取内部温度🎬STM32CubeMX参数配置演示(没有包含串口1的配置内容)🚩请注意:以演示中没有展现串口1的开启演示过程,需要自己勾选USART1STM32CubeMX配置解析内部温度和参考电压都属于... 查看详情
stm32f103vet6基于stm32cubemx创建串口中断+dma不定长数据接收(代码片段)
STM32F103VET6基于STM32CubeMX创建串口中断+DMA不定长数据接收✨STM32CubeMX工程配置过程演示:📍此工程参考《STM32CubeMX|STM32使用HAL库DMA+空闲中断实现串口不定长数据接收》📓DMA参数介绍🎉DMA传输方式🌿传输... 查看详情
stm32f103vet6基于stm32cubemx配置dac-三角波输出示例(代码片段)
STM32F103VET6基于STM32CubeMX配置DAC-三角波输出示例📽🎞🎬STM32CubeMX配置过程演示📍DAC输出引脚位:PA4🌷不同分频系数下的三角波频率分频系数越高,频率越低。htim2.Init.Prescaler=6-1;htim2.Init.Prescale 查看详情
stm32f103vet6基于stm32cubemx创建定时器中断控制led闪烁(代码片段)
STM32F103VET6基于STM32CubeMX创建定时器中断控制LED闪烁🌼STM32CubeMX配置界面演示⚡需求是通过定时器1来控制LED灯1s亮灭。📌工程分为两部分组成:STM32CubeMX创建并配置工程和业务代码完善🍁STM32CubeMX创建并配置工程1.... 查看详情
stm32f103vet6基于arduino开发框架下串口和软串口输出乱码解决方案(代码片段)
STM32F103VET6基于Arduino开发框架下串口和软串口输出乱码解决方案⛳昨天在测试过程中就已经发现了,后面无意间尝试选择了STM32F10ZET6单片机进行烧录测试,结果串口输出正常了。STM32F10ZET6单片机的话是144引脚的,容量... 查看详情
stm32f103vet6基于arduino开发框架下串口和软串口通讯示例(代码片段)
STM32F103VET6基于Arduino开发框架下串口和软串口通讯示例📌相关篇《【硬件开源电路】STM32F103VCT6开发板》🌺通讯演示:✨本示例来源于STM32核心固件自带例程。📢对于STM32F103VET6芯片,Arduino开发环境下,默... 查看详情
stm32f103vet6基于arduino开发框架下freertos串口1不能正常工作解决方案(代码片段)
STM32F103VET6基于Arduino开发框架下FreeRTOS串口1不能正常工作解决方案✨通过搜索发现这个bug存在了这么多年了,在百度经验《STM32F103+FreeRTOS串口模块不能正常工作》就记录了STM32F10x外设固件库v3.5+FreeRTOSv7.0.2存在这个问题... 查看详情
stm32f103vet6基于hal库和标准库下dac心形波形输出(代码片段)
STM32F103VET6基于HAL库和标准库下DAC心形波形输出🎞🎬鼎阳示波器上位机软件:EasyScopeX通过USB连接电脑截图显示:以上是基于标准库的波形。✨上面是基于HAL库创建的工程烧录显示的波形图。🎉本工程支持极海... 查看详情
stm32f103c8t6基于arduino框架下利用定时器跑rbg灯闪烁(代码片段)
STM32F103C8T6基于Arduino框架下利用定时器跑RGB灯闪烁🌼演示效果✨在程序示例测试当中发现好多库对STM32系列支持的不够全面,其中原因有STM32固件本身就有缺陷和bug,导致好多库都只能在部分型号中实现。另外测试STM32... 查看详情
三实战小例程基于stm32f103c8t6最小系统板和stm32cubemx驱动ws2812b光立方(代码片段)
系列文章目录一、基于STM32F103C8T6最小系统板和STM32CubeMX实现LED灯循环闪烁二、基于STM32F103C8T6和STM32CubeMX实现UART串口通信数据收发三、实战小例程基于STM32F103C8T6最小系统板和STM32CubeMX驱动WS2812B光立方(目前还只是个平方)... 查看详情
stm32学习笔记二基于stm32f103c8t6和stm32cubemx实现uart串口通信数据收发(代码片段)
系列文章目录一、基于STM32F103C8T6最小系统板和STM32CubeMX实现LED灯循环闪烁二、基于STM32F103C8T6和STM32CubeMX实现UART串口通信数据收发三、实战小例程基于STM32F103C8T6最小系统板和STM32CubeMX驱动WS2812B光立方四、基于STM32F103C8T6最小系统板... 查看详情
stm32学习笔记一基于stm32f103c8t6最小系统板和stm32cubemx实现板载led灯循环闪烁(代码片段)
系列文章目录一、基于STM32F103C8T6最小系统板和STM32CubeMX实现LED灯循环闪烁二、基于STM32F103C8T6和STM32CubeMX实现UART串口通信数据收发三、实战小例程基于STM32F103C8T6最小系统板和STM32CubeMX驱动WS2812B光立方四、基于STM32F103C8T6最小系统板... 查看详情
stm32的意思是啥呢?
...汇编和C语言的板级编程。如果从软件上讲,就是要学习基于ARM处理器的操作系统层面的驱动、移植了。硬件的寄存器类的东西还是要能看懂的,掌握基于板级的汇编和C编程。主要需要学习的有:基础操作:GPIO操作,串口操作,... 查看详情
基于stm32f103循迹避障遥控车
参考博文:上篇中篇下篇 查看详情
基于stm32f103的智能门锁系统(代码片段)
基于STM32F103的智能门锁系统直接说明实现了什么效果1指纹解锁(基于AS608)2RFID解锁(基于RC522)3密码解锁(基于LCD电容屏触摸控制)4蓝牙解锁(基于HC-06)5后台服务器管理开锁信息(基于ESP8266)6APP... 查看详情
stm32f103实例应用(3.1)——gpio(增加深度)(代码片段)
...片的GPIO被分成很多组,每组16个引脚,如型号STM32F103VET6的芯片有GPIOA至GPIOE共5组GPIO。芯片一共100个引脚, 查看详情
stm32学习笔记二基于stm32f103c8t6和stm32cubemx实现uart串口通信数据收发(代码片段)
系列文章目录一、基于STM32F103C8T6最小系统板和STM32CubeMX实现LED灯循环闪烁二、基于STM32F103C8T6和STM32CubeMX实现UART串口通信数据收发三、实战小例程基于STM32F103C8T6最小系统板和STM32CubeMX驱动WS2812B光立方四、基于STM32F103C8T6最小系统板... 查看详情