![瑞萨单片机开发教程[三十二] TSN 内部温度传感器](http://pic.xiahunao.cn/yaotu/瑞萨单片机开发教程[三十二] TSN 内部温度传感器)
开发板官网https://www.edevkit.com/本系列教程目录- 瑞萨单片机开发教程[一] e2-studio DAP LINK开发环境搭建- 瑞萨单片机开发教程[二] Keil/RASC开发环境搭建- 瑞萨单片机开发教程[三] 新建RASC工程- 瑞萨单片机开发教程[四] GPIO输出——led实验- 瑞萨单片机开发教程[五] GPIO输入——按键key实验- 瑞萨单片机开发教程[六] ICU外部中断实验- 瑞萨单片机开发教程[七] SCI UART串口通信实验- 瑞萨单片机开发教程[八] DMAC 串口数据传输实验- 瑞萨单片机开发教程[九] ADC 电压采集实验TSN 内部温度实验本章目标了解 RA6M5 处理器的 ADC 模块学会使用 RASC 配置 ADC 读取芯片内部温度。硬件设计略参见配套硬件原理图软件设计新建工程复制一份 “07 SCI_UART_Recv_send” 修改文件夹名 “32 TSN_innerTemp”双击打开EBF_RA6M5.uvprojx工程通过 Keil 的新建文件新建tsn.c和tsn.h保存到目录下的\src文件夹下。FSP 配置Keil 界面选择 “Tools”→“RA Smart Configurator” 打开 RASC 界面。添加 ADC Stack 模块。配置 ADC Stack 参数。Module→Input→Channel Scan Mask勾选 “Temperature Sensor”在 “RA6M5 Group Users Manual: Hardware” 手册 45 章温度计算说明。配置完成之后可以按下快捷键Ctrl S保存最后点击 Generate Project Content 按钮让软件自动生成配置代码即可。程序设计初始化 ADC 模块在循环中读取内部温度通道的 ADC 值结合手册公式换算成温度值并打印到串口。程序编写tsn.h头文件定义初始化和读取函数。#ifndef __BSP_TSN_H #define __BSP_TSN_H #include hal_data.h void tsn_Init(void); void read_tsn_value(void); #endiftsn.c中实现初始化 ADC读取内部温度 ADC 值并换算。#include tsn.h //ADC转换完成标志位 volatile bool scan_complete_flag false; //ADC转换完成中断 void tsn_callback(adc_callback_args_t * p_args) { FSP_PARAMETER_NOT_USED(p_args); scan_complete_flag true; } //ADC初始化 void tsn_Init(void) { fsp_err_t err; err R_ADC_Open(g_adc0_ctrl, g_adc0_cfg); err R_ADC_ScanCfg(g_adc0_ctrl, g_adc0_channel_cfg); assert(FSP_SUCCESS err); } //读取ADC数据并转换结果 void read_tsn_value(void) { uint16_t adc_data; int32_t cal127; adc_info_t adc_info; (void)R_ADC_ScanStart(g_adc0_ctrl); while (!scan_complete_flag) //等待转换完成标志 { ; } scan_complete_flag false; //重新清除标志位 // 读取通道0数据 R_ADC_Read(g_adc0_ctrl, ADC_CHANNEL_TEMPERATURE, adc_data); R_ADC_InfoGet(g_adc0_ctrl, adc_info); cal127 (int32_t) adc_info.calibration_data; double slope 4.0/1000; double v1 3.3 * cal127 / 4096; double vs 3.3 * adc_data /4096; double temperature (vs - v1) / slope 127; printf(CPU Temperature: %.1f\r\n, temperature); }在hal_entry.c文件中包含tsn.h循环中每秒读取温度值。void hal_entry(void) { /* TODO: add your own code here */ led_Init(); // LED 初始化 uart0_Init(); tsn_Init(); printf(start tsn test\r\n); while(1) { LED1_TOGGLE(); R_BSP_SoftwareDelay(1, BSP_DELAY_UNITS_SECONDS); //延时1秒 read_tsn_value(); } #if BSP_TZ_SECURE_BUILD /* Enter non-secure code */ R_BSP_NonSecureEnter(); #endif }下载验证连接下载器将程序编译并下载到开发板之后按下复位按键来复位开发板程序启动初始化完。可以看到每秒打印温度值。