问题1:客户正在使用 MSP430FR6043超声波燃气表解决方案。 客户正在测试6000V 静电放电测试、发现外部32.768K 时钟输出正常、并且来自外部时钟源的串行端口波特率异常。 直接测试晶体振荡器测试引脚、可找到32.768kHz 波形。 是的。 MSP430FR6043复位后恢复正常。 这个问题几乎有很高的复发率。 客户初始化代码附件和硬件电路图与 TI 超声波演示板一致。
以下是32.768K 时钟初始化
-------------------------------------------------------
void CS_initClockSignal (uint8_t selectedClockSignal、
uint16_t clockSource、
uint16_t clockSourceDivider)
{
//验证用户是否选择了有效的分频器
断言(
(cs_clock_divider _1 = clockSourceDivider)||
(cs_clock_divider 2 == clockSourceDivider)||
(cs_clock_divider 4 == clockSourceDivider)||
(cs_clock_divider = clockSourceDivider)||
(cs_clock_divider _16 == clockSourceDivider)||
(cs_clock_divider _32 == clockSourceDivider)
);
//解锁 CS 控制寄存器
HWREG16 (CS_BASE + OFS_CSCTL0)= CSKEY;
uint16_t temp = HWREG16 (CS_BASE + OFS_CSCTL3);
开关(选定时钟信号)
{
案例 CS_ACLK:
断言(
(cs_LFXTCLK_select == clockSource)||
(cs_VLOCLK_select == clockSource)||
(CS_LFMODOSC_SELECT == clockSource)
);
clockSourceDivider = clockSourceDivider << 8;
clockSource = clockSource << 8;
HWREG16 (CS_BASE + OFS_CSCTL2)&=~(SELA _7);
HWREG16 (CS_BASE + OFS_CSCTL2)|=(clockSource);
HWREG16 (CS_BASE + OFS_CSCTL3)= temp &~(DIVA0 + DIVA1 + DIVA2)|
时钟源分频器;
中断;
案例 CS_SMCLK:
断言(
(cs_LFXTCLK_select == clockSource)||
(cs_VLOCLK_select == clockSource)||
(cs_DCOCLK_select == clockSource)||
(cs_HFXTCLK_select == clockSource)||
(cs_LFMODOSC_select == clockSource)||
(CS_MODOSC_SELECT == clockSource)
);
clockSource = clockSource << 4;
clockSourceDivider = clockSourceDivider << 4;
HWREG16 (CS_BASE + OFS_CSCTL2)&=~(SELS_7);
HWREG16 (CS_BASE + OFS_CSCTL2)|= clockSource;
HWREG16 (CS_BASE + OFS_CSCTL3)= temp &~(DIVS0 + DIVS1 + DIVS2)|
时钟源分频器;
中断;
案例 CS_MCLK:
-------------------------------------------------------
下面是用于串行端口初始化的程序
-------------------------------------------------------
void hal_uart_Init (void)
{
/*
*选择端口1
*将引脚2和3设置为输入主模块功能或 PySEL1 1、0 =[01]、
*(UCA1TXD/UCA1SIMO、UCA1RXD/UCA1SOMI)。
*/
GPIO_setAsPeripheralModuleFunctionInputPin (
GPIO_PORT_P1、
GPIO_PIN2 + GPIO_PIN3
GPIO_PRIMARY_MODULE_FUNCTION
);
//配置 UART
EUSCI_A_UART_initParam 参数={0};
param.page=EUSCI_A_UART_NO_奇 偶校验;//EUSCI_A_UART_NO_奇 偶校验;
param.msborLsbFirst = EUSCI_A_UART_LSB_FIRST;
param.numberofStopBits = EUSCI_A_UART_ONE_STOP_BIT;
param.uartMode = EUSCI_A_UART_MODE;
#if (((HAL_SYS_SMCLK_FREQ_Hz =8000000)&&(HAL_UART_BAUDRATE == 57600))
param.selectClockSource = EUSCI_A_UART_CLOCKSOURCE_SMCLK;
param.clockPrescalar = 8;// 8000000/16/57600 = 8.68
param.firstModReg = 10;// UCOS16=1、BRFx = 10、BRSx = 0xF7
param.secondModReg = 0xF7;
param.OVERSAMPLING = EUSCI_A_UART_OVERSAMPLING_BAUDRAATE_LEGEN;
#Elif (((HAL_SYS_SMCLK_FREQ_Hz==8000000)&&(HAL_UART_BAUDRATE == 115200))
param.selectClockSource = EUSCI_A_UART_CLOCKSOURCE_SMCLK;
param.clockPrescalar = 4;// 8000000/16/115200 = 4.34
param.firstModReg = 5;// UCOS16=1、BRFx = 5、BRSx = 0x55
param.secondModReg = 0x55;
param.OVERSAMPLING = EUSCI_A_UART_OVERSAMPLING_BAUDRAATE_LEGEN;
#Elif ((HAL_SYS_SMCLK_FREQ_Hz==8000000)&&(HAL_UART_BAUDRATE == 19200))
param.selectClockSource = EUSCI_A_UART_CLOCKSOURCE_SMCLK;
param.clockPrescalar = 26;// 8000000/16/19200 = 26.0416
param.firstModReg = 0;// UCOS16=1、BRFx = 0、BRSx = 0xD6
param.secondModReg = 0xD6;
param.OVERSAMPLING = EUSCI_A_UART_OVERSAMPLING_BAUDRAATE_LEGEN;
#Elif ((HAL_UART_BAUDRATE ==9600)&&(HAL_SYS_ACLK_FREQ_Hz==32768)
param.selectClockSource = EUSCI_A_UART_CLOCKSOURCE_ACLK;
param.clockPrescalar = 3;// 32768/9600 = 3.41
param.firstModReg = 0;// UCOS16=0 BRFx = 0、
-------------------------------------------------------
问题2:MSP430FR6043的超声波测量当前使用外部8M 测量晶体振荡器。 内部晶体振荡器是否可用于超声波测量?