小熊派学习——获取STM32内部温度传感器数据
一、实验准备
1.实验环境
一块stm32开发板(推荐使用小熊派),以及数据线
已经安装STM32CubeMX
已经安装KeilMDK,并导入stm32开发板对应的芯片包(小熊派使用的是STM32L431RCT6)
准备一个串口调试助手,我使用的是UartAssist(包含在附件中)
2.目标效果
通过CubeMX创建工程并配置参数
获取stm32内部温度传感器值(通过获取ADC转化为温度值)
串口1重定向输出
二、通过CubeMX生产MDK工程
A.芯片选择
打开CubeMX,进入芯片选择:
选择自己的stm32芯片(即STM32L431RCT6):
B.时钟源RCC设置
更改系统时钟源
系统时钟默认使用内部的高速时钟(HSI),选择使用HSE,时钟更精确
设置外部时钟对应的端口
配置时钟树
STM32L431RCT6系统时钟最大可以为80MHz,我们配置到最大即可
C.参数配置(对应端口设置)
1)配置USART1
使用USART,模式为异步,波特率为115200,无硬件流控制
2)配置ADC1的温度传感器通道
小熊派的ADC1的温度传感器通道在IN17,不同芯片会有所差异
D.工程设置
一些基础的设置,包括工程名、存储位置、工程环境、工程中各个文件的组成
E.生成代码
三、代码补充
1. 串口1输出重定向
我们知道printf是打印函数,原理是根据传入的字符串参数格式化打印输出到stdout中。我们需要让printf打印到串口之中,只需要在usart.c文件中模仿printf写一个输出函数即可
在添加头文件
/* USER CODE BEGIN 0 */ #include <stdarg.h>; #include <string.h>; #include <stdio.h>; /* USER CODE END 0 */
写输出函数
/* USER CODE BEGIN 1 */ void UsartPrintf(UART_HandleTypeDef *huart, char *fmt,...) { unsigned char UsartPrintfBuf[296]; va_list ap; unsigned char *pStr = UsartPrintfBuf; va_start(ap, fmt); vsprintf((char *)UsartPrintfBuf, fmt, ap);//格式化 va_end(ap); while(*pStr != 0) { USART1->TDR = *pStr++; while((USART1->ISR & 0x40) == 0); } } //使用方法:UsartPrintf(&huart1,"hello world\r\n"); /* USER CODE END 1 */
注意:自己添加的代码,需要在begin和end之间
2. 温度值转换
我们首先获取芯片出厂时30°和130°的ADC数值,就是根据芯片手册读取相应地址的内容,然后根据公式 temperatu = (130.0-30)*(ADC_now_value-ADC_30_value)/(ADC_130_value-ADC_30_value)+30。当然这一切来源都是数据手册
当然,为了ADC获取的值更加准确,我们通过获取20次然后去平均值。
main函数中while循环如下:
while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ HAL_ADC_Start(&hadc1); //开启ADC1 HAL_ADC_PollForConversion(&hadc1,50); //等待ADC转化完成 for(num=0;num<20;num++) { AD_Value += HAL_ADC_GetValue(&hadc1); } AD_Value = AD_Value/20; //ADC转换的数据20次的平均值 UsartPrintf(&huart1,"ADC20次获取的平均值值为:%d\r\n",AD_Value); Temperature = ((int16_t)(AD_Value-*TEMP30_CAL_ADDR)*1.0/(int16_t)(*TEMP130_CAL_ADDR-*TEMP30_CAL_ADDR))+30; UsartPrintf(&huart1,"Temperature is %.2f °\r\n",Temperature); // //UsartPrintf(&huart1,"%d\r\n",*TEMP130_CAL_ADDR); //UsartPrintf(&huart1,"%d\r\n",*TEMP30_CAL_ADDR); }
四、编译+下载
点击编译后,0 error,0 warning
小熊派连接在电脑上,代码下载到开发板
五、效果
1.将小熊派串口1和电脑相连,即拨到 AT-MUC,按下复位键
2.打开串口调试助手
连接端口,设置波特率为115200
可以看到,获取芯片内温度传感器的值为29.1°左右。至此,已经完成本次实验
附件中包含CubeMX工程、MDK工程以及串口调试助手
- 点赞
- 收藏
- 关注作者
评论(0)