[原创] TIVAC LAUNCHPAD ADC内部温度传感器

ddlxiaoxu   2013-12-13 16:27 楼主
代码是在ti\TivaWare_C_Series-2.0.1.11577\examples\peripherals\adc里的   
计算结果那稍微改动了一下
用温度计试了   9(阳台)度到20(屋里温度)度 挺准的  就是数不太固定
  1. #include <stdint.h>
  2. #include "inc/hw_memmap.h"
  3. #include "driverlib/adc.h"
  4. #include "inc/hw_uart.h"
  5. #include "driverlib/gpio.h"
  6. #include "driverlib/interrupt.h"
  7. #include "driverlib/pin_map.h"
  8. #include "driverlib/sysctl.h"
  9. #include "driverlib/uart.h"
  10. #include "utils/uartstdio.h"
  11. void
  12. InitConsole(void)
  13. {
  14.     SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
  15.     GPIOPinConfigure(GPIO_PA0_U0RX);
  16.     GPIOPinConfigure(GPIO_PA1_U0TX);
  17.     SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);
  18.     UARTClockSourceSet(UART0_BASE, UART_CLOCK_PIOSC);
  19.     GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);
  20.     UARTStdioConfig(0, 115200, 16000000);
  21. }
  22. void main()
  23. {
  24.         uint32_t pui32ADC0Value[1];
  25.         uint32_t ui32TempValueC;
  26.          SysCtlClockSet(SYSCTL_SYSDIV_10 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN |
  27.                            SYSCTL_XTAL_16MHZ);
  28.         InitConsole();
  29.         UARTprintf("ADC ->\n");
  30.         UARTprintf("  Type: Internal Temperature Sensor\n");
  31.         UARTprintf("  Samples: One\n");
  32.     UARTprintf("  Update Rate: 250ms\n");
  33.         UARTprintf("  Input Pin: Internal temperature sensor\n\n");
  34.         SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0);//使能ADC
  35.         //                   ADC基地址  采样序列号3  处理事件  相对其他优先级高0 最高
  36.    ADCSequenceConfigure(ADC0_BASE, 3, ADC_TRIGGER_PROCESSOR, 0);
  37. //                      ADC基地址        采样序列编号  3 步值范围0    温度传感器 选着  中断使能 队列结束选择
  38.    ADCSequenceStepConfigure(ADC0_BASE, 3, 0, ADC_CTL_TS | ADC_CTL_IE |
  39.                             ADC_CTL_END);
  40.    ADCSequenceEnable(ADC0_BASE, 3);//使能ADC采样序列
  41.    ADCIntClear(ADC0_BASE, 3);//清除ADC采样序列
  42.         while(1)
  43.         {
  44.                  ADCProcessorTrigger(ADC0_BASE, 3);//引起一次ADC触发
  45.                         //     获取采样序列状态      基地址    采样序列编号  false 原始中断状态        true屏蔽的中断状态
  46.              while(!ADCIntStatus(ADC0_BASE, 3, false))
  47.                         {
  48.                         }
  49.              ADCIntClear(ADC0_BASE, 3);//清除ADC采样序列
  50.               //ADC采样序列中获取数据                               指向数据缓冲区
  51.          ADCSequenceDataGet(ADC0_BASE, 3, pui32ADC0Value);
  52.          ui32TempValueC =127.5-((75*30*pui32ADC0Value[0])/40960);
  53.          UARTprintf("Temperature = %3d*C\r", ui32TempValueC);
  54.              SysCtlDelay(SysCtlClockGet() / 12);

  55.         }
  56. }

回复评论 (3)

不错!!!!
点赞  2014-1-17 13:24
帮顶
点赞  2014-5-8 15:10
stdbool.h 没包含也可以? 貌似用到了false 这个宏定义。
点赞  2014-7-1 22:06
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复