您好,
我已经为设备编程了UART功能。 当我使用CCS调试窗口运行设备时,它工作正常,并且我能够在串行终端上看到正确的字符。 当设备断电后再次连接时,我遇到一些问题。
再次连接时,一些错误的字符被发送到串行终端。 重新编程时设备工作正常。 如何确保即使在电源重置后仍发送正确的字符?
此致,
Abhishek。
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.
您好,
我已经为设备编程了UART功能。 当我使用CCS调试窗口运行设备时,它工作正常,并且我能够在串行终端上看到正确的字符。 当设备断电后再次连接时,我遇到一些问题。
再次连接时,一些错误的字符被发送到串行终端。 重新编程时设备工作正常。 如何确保即使在电源重置后仍发送正确的字符?
此致,
Abhishek。
您好,
否,此问题尚未解决。 我观察到的是,每次通电后,UART都会向串行终端发送不正确的字符。 请查找我的项目中包含的附加main.c和low_leve_init.c文件。
主要c
#include "MSP4S.h"
unsigned char I;
void main(void){
WDTCTL = WDTPW | WDTHOLD; //停止看门狗计时器
P1SEL0 || BIT2 | BIT3; // WFP ESP/3 1.2 eUSCI_A函数
P1SEL1 &=~(BIIT2 | BIT3);
UCA0CTL1 |= UCSWRST; //在复位时按住eUSCI
UCA0CTL1 || UCSSEL_2; // SMCLK
UCA0BR0 = 0xAA; // 9600波特
UCA0BR1 = 0x06;
UCA0MCTLW = 0xD600; // 16.384MHz/9600 = 1706.6667 (参见UG)
UCA0CTL1 &=~UCSWRST; //从重置中释放
UCA0IE |= UCRXIE;//启用RX中断
I='f';
while (1)
{
while (!(UCA0IFG&UCTXIFG));// USSCI_A0 TX缓冲器就绪?
UCA0TXBUF = I;
}
__bis_sr_register (LPM0_BITS | GIE); //输入LPM0
__no_operation(); //用于调试器
}
low_lever_init
包括"MSP4S.h"
#ifdef __TI_Compiler_version__
int _system_pre_init(void)
#Elif __IAR_SYSTEMS _ICC__
int __low_lever_init (void)
#Elif __GNUC__
extern int system_pre_init(void)__attribute_(构造函数));
int system_pre_init(void)
#否则
错误编译器不受支持!
#endif
{
unsigned long *jtagPwd =(unsigned long *)JTAG_DIS_PWD1;
/*为看门狗计时器供电*/
WDTCTL = WDTPW | WDTCNTCL;
/*检查JTAG密码位置,如果密码不匹配,则禁用JTAG。
*否则,JTAG将在重置后的第64个周期中启用。
*/
如果(*jtagPwd != 0x0万)&&(*jtagPwd != 0xFFFFFFFFFFFFFFF))
{
/*禁用JTAG */
SYSJTAGDIS = JTAGDISKEY;
}
/*校准部分
*检查IFG1中是否有BORIFG标志。 如果这是一个BorIFG,则执行校准。
*否则跳过校准
*/
IF (IFG1和BORIFG)
{
/*对62字节TLV数据执行2的补码校验和*/
无符号int校验和=0;
unsigned char *TLV_address_for _parse =(unsigned char *)TLV_start);
unsigned int *TLV_address_for校验和=(unsigned int *) TLV_start + 1);
做
{
checksum ^=* TLV_address_for校验和++;
}同时(TLV_address_for校验和<=(unsigned int *)TLV_end);
checksum ^= 0xFFFF;
校验和++;
/*如果校验和不正确,转到LPM4 */
如果(*(unsigned int *)TLV_start)!=校验和)
{
/*如果校验和失败,则输入LPM4 */
__bis_sr_register (LPM4_bits);
}
/*校验和已匹配,现在设置校准值*/
/*校准参考*/
REFCAL1 =*(TLV_ADDRESS_FOR_PARse + TLV_CAL_REFCAL1);
REFCAL0 =*(TLV_address_for _parse + TLV_CAL_REFCAL0);
/*校准DCO */
CSIRFCAL =*(TLV_address_for _parse + TLV_CAL_CSIRFCAL);
CSIRTCAL =*(TLV_ADDRESS_FOR_PARse + TLV_CAL_CSIRTCAL);
CSERFCAL =*(TLV_ADDRESS_FOR_PARse + TLV_CAL_CSERFCAL);
CSERTCAL =*(TLV_ADDRESS_FOR_PARse + TLV_CAL_CSERTCAL);
/*校准SD24 */
SD24TRIM =*(TLV_address_for _parse + TLV_CAL_SD24TRIM);
/*清除BorIFG */
IFG1 &=~(BORIFG);
}
/*为看门狗计时器供电*/
WDTCTL = WDTPW | WDTCNTCL;
/*返回值:
* 1 -执行数据段初始化。
*0- 跳过数据段初始化。
*/
返回1;
}