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.

[参考译文] MSP430 G2553 P1.1和 P1.3引脚始终提供3.3V 输出。

Guru**** 2595805 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/892322/msp430-g2553-p1-1-and-p1-3-pins-always-give-3-3v-output

主题中讨论的其他器件:MSP430G2553

你(们)好 我在 G2553上处理 ADC 芯轴。 当我使用 P1.1引脚使用 ADC 时、它无法正确测量。 即使未安排输出、我也使用万用表在该引脚处测量了3.3V 电压。 我检查了所有其他引脚、我还在 P1.3上测量了3.3V 电压。 为什么这些引脚始终提供输出? 我使用的代码是吹气。

#include

volatile long tempRaw;
易失性 int 通道;
void WDTSettings (void);
void FaultRoutine (void);
void ClockSettings (void);
void PinSettings (void);
void ADCinitializeChannel_4 (void);
void ADCinitializeChannel_5 (void);
void ADCRestart (void);
int Calculate_Voltage (int tempRaw);

void main (void)

WDTSettings();
IF (CALBC1_1MHz =0xFF || CALDCO_1MHz =0xFF)
FaultRoutine();//如果校准数据被擦除
ClockSettings();
PinSettings();

while (1)

通道= 14;
if (Channel=14){
ADCinitializeChannel_4 ();

IF (Calculate_Voltage (ADC10MEM)< 1)
P1OUT = BIT0;
其他
P1OUT = 0x00;
_delay_cycles (125000);
ADCRestart();
通道= 15;

if (Channel==15){
ADCinitializeChannel_5 ();

IF (Calculate_Voltage (ADC10MEM)> 1)
P1OUT = BIT6;
其他
P1OUT = 0x00;
_delay_cycles (125000);
ADCRestart();



void WDTSettings (void){
WDTCTL = WDTPW + WDTHOLD;//停止看门狗计时器

void ClockSettings (void){
BCSCTL1 = CALBC1_1MHz;//设置范围
DCOCTL = CALDCO_1MHz;//设置 DCO 步长+调制
BCSCTL3 |= LFXT1S_2;// LFXT1 = VLO
IFG1 &=~OFIFG;//清除 OSCFault 标志
BCSCTL2 |= SELM_0 + DIVM_3 + DIVS_3;// MCLK = DCO/8

void PinSettings (void){
P1DIR = 0x41;// P1.0&6输出
P1OUT = 0;// LED 关闭

空 FaultRoutine (空)

P1OUT = 0x01;//红色 LED 亮起

void ADCinitializeChannel_4 (void){
ADC10CTL1 = INCH_4 + ADC10DIV_0;//温度传感器 ADC10CLK
ADC10CTL0 = SREF_0 + ADC10SHT_3 + REFON + ADC10ON;
_delay_cycles (5);//等待 ADC 基准趋稳
ADC10CTL0 |= ENC + ADC10SC;//采样和转换开始

void ADCinitializeChannel_5 (void){
ADC10CTL1 = INCH_5 + ADC10DIV_0;//温度传感器 ADC10CLK
ADC10CTL0 = SREF_0 + ADC10SHT_3 + REFON + ADC10ON;
_delay_cycles (5);//等待 ADC 基准趋稳
ADC10CTL0 |= ENC + ADC10SC;//采样和转换开始

void ADCRestart (void){
ADC10CTL0 &=~ENC;
ADC10CTL0 &=~(REFON + ADC10ON);

int Calculate_Voltage (int tempRaw){
内部电压;
Voltage =(tempRaw)*(3.3/1024);
返回电压;
_delay_cycles (125000);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Akin、

    我想您的问题之一是 Calculate_Voltage。

    如果不寻找正确格式的变量、计算起来并不容易。 将浮点值和整数值混合在一起。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我怀疑您使用的是 G2 (ET) Launchpad。

    P1.1由反向通道 UART (RXD)驱动。 您可以通过从 J101上移除 TXD/RXD 跳线来释放它。

    P1.3连接到按钮 S2。 在某些 Launchpad (包括 G2ET)上有一个外部上拉电阻器。 您可以通过移除电阻器将其释放、但您可能不想这么做。 [参考 G2ET Launchpad UG (SLAU772)第6条]

    P1.1-3提供您可能最终想要的功能。 我建议您从 A4 (P1.4)开始、这是您现在的工作方式。