[开发板] 【CW32L031CxTx StartKit评估板测评】+片内温度检测

[复制链接]
961|0
 楼主| jinglixixi 发表于 2023-10-26 22:40 | 显示全部楼层 |阅读模式
本帖最后由 jinglixixi 于 2023-10-26 22:42 编辑

CW32L031开发板内置了多个ADC模数转换通道,且内置了温度传感器,利用它与LCD5110显示屏相配合可完成片内温度的检测与显示功能,其效果如下图所示。
1.jpg
片内温度检测与显示


在ADC参考电压为1.5V时,其读取片内温度传感器的函数为:
  1. void ADC_GetTsVref1V5(float *fAdcTsDegree)
  2. {
  3.     uint16_t u16AdcResult;
  4.     uint8_t temp1;
  5.     uint16_t temp2;
  6.     temp1 = *((uint8_t*) (ADDR_T0));
  7.     temp2 = *((uint16_t*) (ADDR_TRIM_1P5));
  8.     u16AdcResult = ADC_GetConversionValue();
  9.     *fAdcTsDegree = temp1 * 0.5f + COEFF_TS * 1.5f * (u16AdcResult - temp2);
  10. }
在单次转换模式下,其采样与显示主程序为:
  1. int main(void)
  2. {
  3.     ADC_InitTypeDef ADC_InitStructure = {0};
  4.     ADC_WdtTypeDef ADC_WdtStructure = {0};
  5.     ADC_SingleChTypeDef ADC_SingleChStructure = {0};
  6.     RCC_HSI_Enable(RCC_HSIOSC_DIV6);
  7.     ADC_PortInit();
  8.     GTIM_Init();
  9.     ADC_StructInit(&ADC_InitStructure);
  10.     ADC_InitStructure.ADC_VrefSel = ADC_Vref_BGR1p5;
  11.     ADC_WdtInit(&ADC_WdtStructure);
  12.     ADC_SingleChStructure.ADC_DiscardEn = ADC_DiscardNull;
  13.     ADC_SingleChStructure.ADC_Chmux = ADC_TsInput;
  14.     ADC_SingleChStructure.ADC_InitStruct = ADC_InitStructure;
  15.     ADC_SingleChStructure.ADC_WdtStruct = ADC_WdtStructure;
  16.     ADC_SingleChOneModeCfg(&ADC_SingleChStructure);
  17.     ADC_ITConfig(ADC_IT_EOC, ENABLE);
  18.     ADC_EnableIrq(ADC_INT_PRIORITY);
  19.     ADC_ClearITPendingAll();
  20.     ADC_Enable();
  21.     ADC_ExtTrigCfg(ADC_TRIG_GTIM1, ENABLE);
  22.     GTIM_Cmd(CW_GTIM1, ENABLE);
  23.     LCD5510_CONFIG();
  24.     LED_SetHigh();
  25.     CS_SetLow();
  26.     LCD5510_Init();
  27.     LCD_prints(0,0,"CW32L031");
  28.     LCD_printc(0,1,'T');
  29.     LCD_printc(1,1,'=');
  30.     LCD_printc(8,1,'C');
  31.     while (1)
  32.     {
  33.         while (!(gFlagIrq & ADC_ISR_EOC_Msk));
  34.         gFlagIrq = 0u;
  35.         valueAdc = ADC_GetConversionValue();
  36.         LCD_printc(2,1,valueAdc/1000+'0');
  37.         LCD_printc(3,1,valueAdc%1000/100+'0');
  38.         LCD_printc(4,1,'.');
  39.         LCD_printc(5,1,valueAdc%100/10+'0');
  40.         LCD_printc(6,1,valueAdc%10+'0');
  41.         ADC_GetTsVref1V5(&fTsDegree);
  42.     }
  43. }
经程序的编译与下载,则可得到上图所示的检测效果。


您需要登录后才可以回帖 登录 | 注册

本版积分规则

521

主题

2949

帖子

39

粉丝
快速回复 在线客服 返回列表 返回顶部