[活动专区] 【AT-START-F407测评】+基于A/D的片内温度检测与显示

[复制链接]
 楼主| jinglixixi 发表于 2021-1-28 22:08 | 显示全部楼层 |阅读模式
在AT32F407的A/D转换器中配置了内部的温度检测通道,利用它与OLED屏相配合,可以轻松地实现一个片内温度检测器,其显示效果如图所示。
                              
1.png
片内温度检测器
实现该显示功能的主程序为:
  1. int main(void)
  2. {
  3. int num;
  4. RCC_Configuration();
  5. Delay_init();
  6. DMA_Reset(DMA1_Channel1);
  7. DMA_DefaultInitParaConfig(&DMA_InitStructure);
  8. DMA_InitStructure.DMA_PeripheralBaseAddr    = ADC1_DR_Address;
  9. DMA_InitStructure.DMA_MemoryBaseAddr     = (uint32_t)&ADCConvertedValue;
  10. DMA_InitStructure.DMA_Direction             = DMA_DIR_PERIPHERALSRC;
  11. DMA_InitStructure.DMA_BufferSize            = 1;
  12. DMA_InitStructure.DMA_PeripheralInc          = DMA_PERIPHERALINC_DISABLE;
  13. DMA_InitStructure.DMA_MemoryInc            = DMA_MEMORYINC_DISABLE;
  14. DMA_InitStructure.DMA_PeripheralDataWidth    = DMA_PERIPHERALDATAWIDTH_HALFWORD;
  15. DMA_InitStructure.DMA_MemoryDataWidth     = DMA_MEMORYDATAWIDTH_HALFWORD;
  16. DMA_InitStructure.DMA_Mode                = DMA_MODE_CIRCULAR;
  17. DMA_InitStructure.DMA_Priority              = DMA_PRIORITY_HIGH;
  18. DMA_InitStructure.DMA_MTOM              = DMA_MEMTOMEM_DISABLE;
  19. DMA_Init(DMA1_Channel1, &DMA_InitStructure);
  20. DMA_ChannelEnable(DMA1_Channel1, ENABLE);
  21. ADC_StructInit(&ADC_InitStructure);
  22. ADC_InitStructure.ADC_Mode              = ADC_Mode_Independent;
  23. ADC_InitStructure.ADC_ScanMode          = DISABLE;
  24. ADC_InitStructure.ADC_ContinuousMode     = ENABLE;
  25. ADC_InitStructure.ADC_ExternalTrig         = ADC_ExternalTrig_None;
  26. ADC_InitStructure.ADC_DataAlign           = ADC_DataAlign_Right;
  27. ADC_InitStructure.ADC_NumOfChannel      = 1;
  28. ADC_Init(ADC1, &ADC_InitStructure);
  29. ADC_RegularChannelConfig(ADC1, ADC_Channel_TempSensor, 1, ADC_SampleTime_239_5);
  30. ADC_DMACtrl(ADC1, ENABLE);         
  31. ADC_TempSensorVrefintCtrl(ENABLE);
  32. ADC_Ctrl(ADC1, ENABLE);
  33. ADC_RstCalibration(ADC1);
  34. while(ADC_GetResetCalibrationStatus(ADC1));
  35. ADC_StartCalibration(ADC1);
  36. while(ADC_GetCalibrationStatus(ADC1));
  37. ADC_SoftwareStartConvCtrl(ADC1, ENABLE);
  38. AT32_OLED_Init();
  39. OLED_Init();
  40. OLED_Clear();
  41. OLED_ShowString(0,0,"AT-START-F407",16);
  42. OLED_ShowString(0,2,"OLED & ADC ",16);   
  43. Delay_ms(1000u);
  44. OLED_Clear();
  45. OLED_ShowString(0,0,"AT-START-F407",16);
  46. OLED_ShowString(0,2,"Temp:    deg C",16);
  47. while (1)
  48. {
  49. num=(ADC_TEMP_BASE-(double)ADCConvertedValue*ADC_VREF/4096)/ADC_TEMP_SLOPE+25;
  50. OLED_ShowNum(40,2,num,3,16);
  51. Delay_sec(1);
  52. }
  53. }


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

本版积分规则

515

主题

2929

帖子

39

粉丝
快速回复 返回顶部 返回列表