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.

[参考译文] CCS/MSP430FR2355:CCS/MSP430FR2355

Guru**** 2537190 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/761856/ccs-msp430fr2355-ccs-msp430fr2355

器件型号:MSP430FR2355

工具/软件:Code Composer Studio

现在、我可以借助以下代码将 ADC 数据发送到 RealTerm:-

#include 
void init_UART();
unsigned long int adc_result;
int main (void)
{
WDTCTL = WDTPW | WDTHOLD; //停止 WDT
init_uart();
//配置 GPIO
P1DIR |= BIT0; //将 P1.0/LED 设置为输出方向
P1OUT &=~BIT0; // P1.0 LED 关闭

//配置 ADC A1引脚
P1SEL0 |= BIT1;
P1SEL1 |= BIT1;

//禁用 GPIO 上电默认高阻抗模式以激活
//先前配置的端口设置
PM5CTL0 &=~LOCKLPM5;

//配置 ADC12
ADCCTL0 |= ADCSHT_2 | ADCON; // ADCON、S&H=16 ADC 时钟
ADCCTL1 |= ADCSHP; // ADCCLK = MODOSC;采样定时器
ADCCTL2 &=~ADCRES; //清除 ADCCTL 中的 ADCRES
ADCCTL2 |= ADCRES_2; // 12位转换结果
ADCMCTL0 |= ADCINCH_1; // A1 ADC 输入选择;Vref=AVCC
ADCIE |= ADCIE0; //启用 ADC 转换完成中断

while (1)
{
while (ADCCTL1和 ADCBUSY); //等待 ADC 内核处于活动状态
ADCCTL0 |= ADCENC | ADCSC; //采样和转换开始
_bis_SR_register (LPM0_bits | GIE); // LPM0、ADC_ISR 将强制退出
__no_operation();//仅用于调试
while (!(UCA0IFG & UCTXIFG)); //等待 USCI_A0 TX 缓冲器准备就绪
UCA0TXBUF=ADC_Result;
如果(ADC_RESULT < 0x7FF)
P1OUT &=~BIT0; //清除 P1.0 LED 关闭
其他
P1OUT |= BIT0; //将 P1.0 LED 设置为打开
__DELAY_CYCLES (5000);
}
}
void init_uart()
{
//配置 UART 引脚
P1SEL0 |= BIT6 | BIT7; //将2个 UART 引脚设置为第二个功能
//配置 UART
UCA0CTLW0 |= UCSWRST; //软设置复位使能
UCA0CTLW0 |= UCSSEL_SMCLK; //将 SMCLK 设置为 BRCLK 以用于115200的波特率
//波特率计算。 将波特率设置为115200
UCA0BR0 = 8; // 1000000/115200 = 8.68 INT (N)= 8
UCA0MCTLW = 0xD600; // 1000000/115200 - INT (1000000/115200)=0.68
UCA0BR1 = 0x00; // UCBRSx 值= 0xD6
UCA0CTLW0 &=~UCSWRST; //初始化 eUSCI
}
// ADC 中断服务例程
#if defined (__TI_Compiler_version__)|| defined (__IAR_systems_ICC__)
#pragma vector=ADC_vector
__interrupt void ADC_ISR (void)
#Elif defined (__GNU__)
_ define (interrupt (interrupt (ADC_vector)
#else)#error
!
#endif
{
switch (__evo_in_range (ADCIV、ADCIV_ADCIFG))
{
案例 ADCIV_NONE:
中断;
ADCIV_ADCOVIFG 案例:
中断;
案例 ADCIV_ADCTOVIFG:
中断;
ADCIV_ADCHIIFG 案例:
中断;
ADCIV_ADCLOIFG 案例:
中断;
ADCIV_ADCINIFG 案例:
中断;
ADCIV_ADCIFG 案例:
ADC_RESULT = ADCMEM0;
_BIC_SR_REGISTER_ON_EXIT (LPM0_BITS); //从 LPM0清除 CPUOFF 位
中断;
默认值:
中断;
}
}

但我想在 Excel 的列中绘制 ADC 数据、由于该程序具有12位分辨率、但我仍然获得8位数据、而不是12位数据。在该程序中、我犯了错误。请向我提供建议和建议。

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

    查看在何处加载带有 ADC_Result 的 UCA0TXBUF。 12位结果存储在已声明为 unsigned int long 的 ADC_Result 中。 UCA0TXBUF 只是一个8位寄存器。 当你将 ADC_Result 复制到 UCA0TXBUF 中时、只有低8位被传输。 您将需要发送第二个字节、其中包含12位结果的上部。