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