请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
部件号:MSP430FR6989 主题中讨论的其他部件: MSP430G2553
工具/软件:Code Composer Studio
您好,TI论坛。 我的最后一个问题几乎与我现在在这里发表的问题相同(见 :https://e2e.ti.com/support/microcontrollers/msp430/f/166/t/63.901万)
从我原来的岗位上,我成功地使MSP430G2553从光敏电阻接收到其ADC引脚(WFP 1.3)的电压值。 这些ADC10值通过UART发送,其中一个名为CoolTerm的程序能够将数字打印到我的PC屏幕上。 我的下一个目标是使用MSP430FR6989将整个电路从ADC10设置转换为ADC12设置。 在浏览了头文件和几个UART示例代码之后,我尝试在下面转换这两个MSP430板之间的所有内容。 令人遗憾的是,它不起作用。 PC不打印任何内容,CoolTerm显示TX或RX均不工作。 我确信我的UART设置或ADC12设置有一两条错误的行,因为某些内容使用了错误的声明。 是否有人可以查看下面的代码,看看我在转换过程中犯了什么错误?
#include "msp430fr6989.h"
#include <stdio.h>
未签名的短数据; //从ADC读取的数据
//全局变量
volatile unsigned int latest_adc_result;
volatile unsigned int timer_count =0;
char buffer[32];
void init_led ();
void init_UART ();
void init_timer();
void init_adc();
void start_conversion ();
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; //停止WDT
PM5CTL0 &=~LOCKLPM5;//禁用GPIO通电默认高阻抗模式以激活配置的端口设置
//时钟系统设置
CSCTL0_H = CSOKEY >> 8; //解锁CS寄存器
CSCTL1 = DCOFSEL_0 | DCORSEL; //将DCO设置为16MHz
CSCTL2 =拉美_ VLOCLK | SESS__DCOCLK | SELM__DCOCLK;// SET SMCLK = MCLK = DCO,
// ACLK = VLOCLK
CSCTL3 = DIVA__1 | DIVs__1 | DIVM__1; //设置所有分禾器
CSCTL0_H = 0; //锁定CS寄存器
//启动外围设备
init_led ();
init_UART ();
init_timer();
init_adc ();
//启用中断并将CPU置于休眠
_bis_sr_register(GIE+LPM3_bits);
}//
帮助器功能
void init_led ()
{
P1DIR = 0x01;
P9DIR = 0x80;
INOPTIF3={ BIT2; BIT3=UART3;
// WFP 1.1 = RXD,WFP 1.2 = TXD
P4SEL1 = BIT3 + BIT2; // 1.1 = RXD,WFP 1.2 = TXD
UCA0CTL1 |= UCSSEL_2; // SMCLK
UCA0BR0 = 104; //参见UCA0BR1
= 0以上的波特率分配器;
UCA0MCTL1 = URSTLF/ URS0
= UCS0 ~UCA0 //**初始化USCI状态机**
UCA0IE_H |= UCTXIE0;// 启用USI_A0 TX中断
}
void init_timer()
{
TA0CTL || TACLR; //重置计时器
TA0CTL = tassel_2 // SMCLK
+ ID_0 //输入分隔符=1
+ MC_2; //连续模式,中断禁用
TA0CCTL0 = OUTMOD_2// 比较模式
+ CCIE //中断启用
+ CCIFG
;}
void init_ADC()
{
ADC12CTL1 = ADC12INCH0 //对ADC的光敏电阻输入
+ ADC12SHS_0 //使用ADC10SC位触发采样
+ ADC12DIV_3 //时钟分频器=4
+ ADC12SSEL_3 //时钟源= SMCLK
+ ADC12CONSEQ0; //
单通道TC1转换 ,每个通道1
//ADC10AE0 = 0x08; //启用A4模拟输入
ADC12CTL0 = CEREF00 //参考电压为VSS和Vcc。 0允许代码工作。
+ ADC12SHT0_3 // 64 ADC10采样和保持时间时钟(最慢)
+ REFON //参考发生器打开
+ ADC12ON //打开ADC10
+ ADC12ENC; //启用(但尚未启动)转换
}
void start_conversion ()
{
IF ((ADC12CTL1 & ADC12BUSY)==0){// if not already converting
P9OUT ^= 0x80;//绿色LED
ADC12CTL0 |= ADC12SC;
ADC12MCTL0 =(
处理程序)
_ latest_ADC_result = 0x80;</rag_erma_erma_er0;}: RELA0_AD_ADC12CTL0_AD_AD_ADC12SC0
如果(timer_count >1){//缺省值为16表示1秒刷新raet
timer_count =0;
start_conversion ();
UCA0IE_H |= UCTXIE0;
}
#pragma vector = USCIAB0TX_vector
__interrupt void USCI0TX_OUT(
指针){ P1ISR|=0x01;////=无信号缓冲
区= 0;/0 (无信号强度)(dvent) //将文本
输出到PC,同时(buffer[i]!='\0'){
while (!(UCA0IFG_H & UCTXIFG));// USI_A0 TX buffer ready?
UCA0TXBUF = buffer[i+];}
P1OUT &=~0x01;//红色LED
UCA0IE_H &=~UCTXIFG;
}