【AT-START-M412测评】ADC 温度采集
# 【AT-START-M412测评】ADC 温度采集本文介绍了雅特力 AT32M412 开发板实现 ADC 采集芯片内部温度,并串口打印的项目设计。
## 项目介绍
- 串口通信测试
- ADC 温度转换与打印
## 工程调试
- 打开 AT32 Work Bench 软件,选择工作空间,选择目标芯片 `AT32M412CBT7` ,点击 `新建` ;
- 使能 USART1 选项,选择 `异步模式` ,配置 PA9 和 PA10 引脚为 USART1 模式;
- 进入 SYSTEM 模块,选择 `USART1` 串口打印;
> 由原理图可知,板载 AT-Link-EZ 调试器支持一组虚拟串口(VCP)与主控 AT32M412CBT7 的 USART1_TX/USART1_RX(PA9/PA10)对接。因此在配置串口通道时,需选择对板载调试器虚拟串口对应的 I/O 接口。
!(data/attachment/forum/202506/01/042311szaf94ngaf94gz43.jpg "usart_bench_config.jpg")
- 时钟树为默认配置(系统时钟频率 180MHz)
!(data/attachment/forum/202506/01/042251cewzjwip21t2dfd1.jpg "clock_tree_default.jpg")
- 其他参数均为默认,点击 `生成代码` 并打开项目。
### 代码
打开工程后,进入 `user` 目录并打开 `main.c` 文件,添加关键代码
```c++
#include "at32m412_416_wk_config.h"
#include "wk_usart.h"
#include "wk_system.h"
int main(void)
{
wk_system_clock_config();
wk_periph_clock_config();
wk_nvic_config();
wk_timebase_init();
wk_usart1_init();
while(1)
{
/* add user code begin 3 */
printf("Hello World !\r\n");
wk_delay_ms(500);
/* add user code end 3 */
}
}
```
保存代码,重新构建工程,上传固件至板端,复位运行。
### 效果
打开串口调试助手,配置串口参数,打开串口,接收串口消息
!(data/attachment/forum/202506/01/042231ivajgjhg95vgjvda.gif "uart_print_hello.gif")
## 工程测试
在完成前面关于串口打印字符串的工程调试项目的基础上,进一步实现 ADC 采集芯片温度并打印的项目设计。
### 工程创建
- 打开 AT32 Work Bench 软件,选择工作空间,选择目标芯片 `AT32M412CBT7` ,点击 `新建` ;
- 进入 `外设` - `ADC` 选项进行参数配置;
- 使能内部温度传感器通道(IN16);
- 开启 ADC 普通组设置,采样时间选择 239.5 个 ADCCLK 周期;
!(data/attachment/forum/202506/01/042212ykp1f71mccfgcg01.jpg "adc_temp_bench_config.jpg")
- 使能 USART1 选项,选择 `异步模式` ,配置 PA9 和 PA10 引脚为 USART1 模式;
- 进入 SYSTEM 模块,选择 USART1 串口打印;
- 其他参数均为默认,点击 `生成代码` 并打开项目。
### 工程代码
打开工程后,进入 `user` 目录并打开 `main.c` 文件,添加关键代码
```c++
#include "at32m412_416_wk_config.h"
#include "wk_adc.h"
#include "wk_usart.h"
#include "wk_system.h"
/* private define ------------------------------------------------------------*/
/* add user code begin private define */
#define ADC_VREF (3.3)
#define ADC_TEMP_BASE (1.28)
#define ADC_TEMP_SLOPE (-0.0043)
/* add user code end private define */
/* add user code begin 0 */
uint16_t ADC_Read(uint8_t channel)
{
adc_ordinary_software_trigger_enable(ADC1, TRUE);
while(adc_flag_get(ADC1, ADC_OCCE_FLAG) == RESET);
adc_flag_clear(ADC1, ADC_OCCE_FLAG);
return adc_ordinary_conversion_data_get(ADC1);
}
int main(void)
{
wk_system_clock_config();
wk_periph_clock_config();
wk_nvic_config();
wk_timebase_init();
wk_usart1_init();
wk_adc_common_init();
wk_adc1_init();
while(1)
{
/* add user code begin 3 */
uint16_t adc_temp = ADC_Read(ADC_CHANNEL_16);
printf("internal_temperature = %f deg C\r\n",(ADC_TEMP_BASE-(double)adc_temp*ADC_VREF/4095)/ADC_TEMP_SLOPE+25);
wk_delay_ms(1000);
/* add user code end 3 */
}
}
```
保存代码,重新构建工程,上传固件至板端,复位运行。
### 效果演示
打开串口调试助手,配置串口参数,打开串口,接收 ADC 采集的芯片内部温度信息
!(data/attachment/forum/202506/01/042149o60vv7822wmkm8sm.gif "internal_temp.gif")
## 总结
本文介绍了雅特力 AT32M412 开发板通过 ADC 实现芯片内部温度采集,并串口输出的项目设计。包括工程调试,使用 AT32 Work Bench 软件快速建立工程并实现串口打印的流程,为 AT32M412 系列单片机的应用和快速开发提供了参考。
页:
[1]