This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TM4C1294NCPDT:TM4C1294NCPDT

Guru**** 2034120 points
Other Parts Discussed in Thread: TM4C1294NCPDT
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/759529/tm4c1294ncpdt-tm4c1294ncpdt

器件型号:TM4C1294NCPDT

大家好、我使用的是 TM4C1294NCPDT 的内部传感器。 当我读取正值时、效果良好、但当我想读取负度时、它始终显示为零度。 我的错误是什么?  

#define PART_TM4C129
#include
#include
#include "stdlib.h"
#include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "inc/hw_UART.h"
#include "inc/hw_gpio.h"
#include "inc/hw_pwm.h"
#include "inc/hw_types.h"
#include "driverlib/adc.h"
#include "driverlib/timer.h"
#include "driverlib/gpio.h"
#include "driverlib/interrupt.h"
#include "driverlib/pin_map.h"
#include "driverlib/rom.h"
#include "driverlib/rom_map.h"
#include "driverlib/sysctl.h"
#include "driverlib/uart.h"
#include "driverlib/udma.h"
#include "driverlib/pwm.h"
#include "driverlib/ssi.h"
#include "driverlib/SysTick .h"
#include "driverlib/adc.h"
#include
void setup(){          
 Serial.begin(9600);
void loop(){
//  SysCtlClockSet (SYSCTL_SYSDIV_2_5|SYSCTL_USE_PLL|SYSCTL_OSC_MAIN|SYSCTL_XTAL_16MHz);
//  InitConsole();
   //
   //该数组用于存储从 ADC FIFO 读取的数据。 它
   //必须与正在使用的序列发生器的 FIFO 一样大。  此示例
   //使用 FIFO 深度为1的序列3。  如果是另一个序列
   //与更深的 FIFO 一起使用,则必须更改数组大小。
   //
   uint32_t ADCValues[1];
   //
   //这些变量用于存储的温度转换
   //摄氏和华氏度。
   //
   uint32_t TempValueC;
   uint32_t TempValueF;
   //
   //在控制台上显示设置。
   //
/*   UARTprintf ("ADC ->\n");
   UARTprintf (" 类型:内部温度传感器\n");
   UARTprintf (" 示例:一个\n");
   UARTprintf (" 更新速率:250ms\n");
   UARTprintf (" 输入引脚:内部温度传感器\n");*/
   //
   //必须启用 ADC0外设才能使用。
   //
  SysCtlPeripheralEnable (SYSCTL_Periph_ADC0);
   SysCtlDelay(3);
   //
   //使用处理器信号触发器启用采样序列3。  序列3
   //将在处理器发送单个样本以启动时执行单个样本
   //转换。  每个 ADC 模块有4个可编程序列、序列0
   //至序列3。  此示例任意使用序列3。
   //
   ADCSequenceConfigure (ADC0_BASE、3、ADC_TRIGGER_PROCESSOR、0);
   //
   //在序列3上配置步骤0。  对温度传感器进行采样
   //(ADC_CTL_TS)并将中断标志(ADC_CTL_IE)配置为置1
   //完成采样后。  告诉 ADC 逻辑、这是最后一个
   序列3上的//转换(ADC_CTL_END)。  序列3只有一个
   //可编程步进。  序列1和2有4个步长、序列0有4个步长
   // 8个可编程步骤。  因为我们仅使用进行单次转换
   //序列3,我们将仅配置步骤0。  有关的更多信息、请参阅
   // ADC 序列和步骤、请参考数据表。
   //
   ADCSequenceStepConfigure (ADC0_BASE、3、0、ADC_CTL_TS | ADC_CTL_IE |
                ADC_CTL_END);
   //
   //由于采样序列3现在已配置,因此必须将其启用。
   //
   ADCSequenceEnable (ADC0_BASE、3);
   //
   //清除中断状态标志。  这样做是为了确保
   //中断标志在我们进行采样之前被清除。
   //
   ADCIntClear (ADC0_BASE、3);
   //
   //永远对温度传感器进行采样。  显示上的值
   //控制台。
   //
   while (1)
   {
     //
     //触发 ADC 转换。
     //
     ADCProcessorTrigger (ADC0_BASE、3);
     //
     //等待转换完成。
     //
     while (!ADCIntStatus (ADC0_BASE、3、false))
     {
     }
     //
     //清除 ADC 中断标志。
     //
     ADCIntClear (ADC0_BASE、3);
     //
     //读取 ADC 值。
     //
     ADCSequenceDataGet (ADC0_BASE、3、ADCValues);
     //
     //使用数据表中提供的非校准转换。 我在中间使用浮点数
     //数学,但是你可以用10倍的幂和最后的除法运算
     //确保最后分频以避免压降。
     //
     TempValueC =(uint32_t)(147.5 -(((75.0*3.3 *(float) ADCValues[0]))/ 4096.0);
     //
     //获取华氏值。  确保最后分频以避免压降。
     //
     TempValueF =((TempValueC * 9)+ 160)/5;
     //
     //在控制台上显示温度值。
     //
     serial.print ("温度= C ");
     serial.print (TempValueC、DEC);
     serial.println(");
     serial.print ("温度= F ");
     serial.print (TempValueF、DEC);
     //
     //此函数提供了生成恒定长度的方法
     //延迟。  函数延迟(以周期为单位)= 3 *参数。  延迟
     //任意地250ms。
     //
     SysCtlDelay (8000000000 / 12);
   }
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Hasan、

    您正在尝试将负值分配给无符号整数(TempValueC 声明为 uint32_t)。 您需要使用有符号整数(int_32t)、或者如果需要小数位数、则使用浮点数来存储负值。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢你的帮助