本章节将通过板载的热敏电阻体验ADC采集,套件包括一个10k线性热敏电阻 (PTC) –TMP6131,PTC 采用具有10kΩ 10ppm上拉电阻器的低侧配置,室温下的输出电压约为1.6V。硬件电路如下:
板载上默认是通过跳线帽把热敏电阻与PA15相连,本次通过单通道连续采集模式对热敏电阻进行采集。
新建一个ADC模块:
配置时钟:
时钟有两个选择,ULPCLK和SYSOSC,目前这两个时钟大小是一样的;
配置采样方式:
基准可以选择VDDA或者外部VREF;ADC的转换模式有单次转换,序列转换,序列转换主要用于多个ADC通道使用的情况,且都支持连续采样;本次采用单次转换模式,使用软件触发,PA15对应的ADC0的Channel 9,基准电压是VDDA;
开启转化完成中断:
在初始化后需要开启中断:
NVIC_EnableIRQ(ADC12_Tem_INST_INT_IRQN);
本次测试使用的是按键触发模式,即每按一次S1按键转换一次ADC的值,所有的处理都在中断中进行:
void GROUP1_IRQHandler(void)
{
switch (DL_GPIO_getPendingInterrupt(GPIO_KEY_PORT)) {
case GPIO_KEY_USER_S1_IIDX:
LED.UpFlag = 1;
LED.state++;
UARTprintf("The key S1 is pressed\n");
DL_ADC12_enableConversions(ADC12_Tem_INST);
DL_ADC12_startConversion(ADC12_Tem_INST);
break;
case GPIO_KEY_USER_S2_IIDX:
LED.UpFlag = 1;
LED.state++;
UARTprintf("The key S2 is pressed\n");
break;
default:
break;
}
}
void ADC12_Tem_INST_IRQHandler(void)
{
uint16_t getResult;
char str[10];
switch (DL_ADC12_getPendingInterrupt(ADC12_Tem_INST)) {
case DL_ADC12_IIDX_MEM0_RESULT_LOADED:
getResult = DL_ADC12_getMemResult(ADC12_Tem_INST, DL_ADC12_MEM_IDX_0);
UARTprintf("Now Tem:\n");
sprintf(str, "%d", getResult);
UARTprintf(str);
break;
default:
break;
}
}
效果如下:
可以看到,将热敏电阻靠近笔记本散热风口后,电压值变大(即采集的AD值)。