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.
工具/软件:Code Composer Studio
您好!
我在 MSP430FR5994上使用 driverLib 的程序时遇到问题。
我将计时器 A 配置为最高1秒的模式、它工作正常(我让中断切换 LED)、但在内部、我通过串行(9600 - 8N1)发送5个字节。
串行工作正常、但数据每两次到达计时器中断、换句话说、一次中断时我看不到串行上的数据、下一次中断时、我会同时获取延迟的数据和新数据。
这是我的代码。
#include "driverlib.h" void board_init() { //将 DCO 频率设置为1MHz CS_setDCOFreq (CS_DCORSEL_0、CS_DCOFSEL_0); //将 MCLK、SMCLK 配置为 DCOCLK 的源 CS_initClockSignal (CS_SMCLK、CS_DCOCLK_SELECT、CS_Clock_divider); CS_initClockSignal (CS_MCLK、CS_DCOCLK_select、CS_Clock_divider); //将 GPIO 引脚设置为 OUT GPIO_setAsOutputPin (GPIO_PORT_P1、GPIO_PIN0 + GPIO_PIN1); //将 GPIO 引脚设置为输入 } void timer_init() { //以 SMCLK 为源的向上计数模式启动定时器 Timer_A_clearTimerInterrupt (timer_A0_BASE); Timer_A_initUpModeParam ={0}; param.clockSource = TIMER_A_CLOCKSOURCE_SMCLK; param.clockSourceDivider = TIMER_A_CLOCKSOURCE_divider _40; param.timerPeriod = 25000; param.timerInterruptEnable_TAIE = TIMER_A_TAIE_INTERRUPT_DISABLE; param.captureCompareInterruptEnable_CCR0_CCIE = TIMER_A_CCIE_CCR0_INTERRUPT_ENABLE; param.timerClear = timer_a_do _clear; param.startTimer = false; Timer_A_initUpMode (timer_A0_BASE、¶m); Timer_A_startCounter (timer_A0_BASE、timer_A_up_mode); } void UART_init () { //配置 UART 引脚 //将 P2.0和 P2.1设置为辅助模块功能输入。 /* *选择端口2D *将引脚0、1设置为输入次级模块功能(UCA0TXD/UCA0SIMO、UCA0RXD/UCA0SOMI)。 * GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P2、 GPIO_PIN0 + GPIO_PIN1、 GPIO_secondary 模块功能); //配置 UART EUSCI_A_UART_initParam param ={0}; param.selectClockSource = EUSCI_A_UART_CLOCKSOURCE_SMCLK; param.clockPrescalar = 6; param.firstModReg = 8; param.secondModReg = 20; param.parity = EUSCI_A_UART_NO_parity; param.msborLsbFirst = EUSCI_A_UART_LSB_FIRST; param.numerofStopBits = EUSCI_A_UART_Oe_STOP_BIT; param.uartMode = EUSCI_A_UART_MODE; param.oversaming= EUSCI_A_UART_oversaming_BAUDRATE_generation; if (STATUS_FAIL = EUSCI_A_UART_init (EUSCI_A0_BASE、¶m)) { 返回; } EUSCI_A_UART_ENABLE (EUSCI_A0_BASE); EUSCI_A_UART_clearInterrupt (EUSCI_A0_BASE、EUSCI_A_UART_receive_interrupt); //启用 USCI_A0 RX 中断 EUSCI_A_UART_enableInterrupt (EUSCI_A0_BASE、 EUSCI_A_UART_receive_interrupt); //启用中断 } int main (void) { //停止看门狗计时器 WDT_A_HOLD (WDT_A_base); Board_init(); timer_init(); UART_INIT(); //激活所有引脚更改 PMM_unlockLPM5 (); _bis_SR_register (GIE); GPIO_setOutputHighOnPin (GPIO_PORT_P1、GPIO_PIN0); _bis_SR_register (LPM0_bits); while (1) { _DELAY_CYCLES (250000);//(1/2)段 GPIO_toggleOutputOnPin (GPIO_PORT_P1、GPIO_PIN1); EUSCI_A_UART_transmitData (EUSCI_A0_BASE、'@Ω'); } } char num[4]; int contador = 0; #pragma vector = TIMER0_A0_vector __interrupt void Timer1_A0_ISR (void) { 如果(contador > 9999) contador = 0; num[3]=(int)(contador % 10); num[2]=(int)((contador / 10)% 10); num[1]=(int)((contador / 100)% 10); num[0]=(int)((contador / 1000)); EUSCI_A_UART_transmitData (EUSCI_A0_BASE、num[0]+ 48); EUSCI_A_UART_transmitData (EUSCI_A0_BASE、num[1]+ 48); EUSCI_A_UART_transmitData (EUSCI_A0_BASE、num[2]+ 48); EUSCI_A_UART_transmitData (EUSCI_A0_BASE、num[3]+ 48); EUSCI_A_UART_transmitData (EUSCI_A0_BASE、10); //切换 P1.0 GPIO_toggleOutputOnPin (GPIO_PORT_P1、GPIO_PIN0); contador ++; } uint8_t RXData = 0、TXData = 0; #pragma vector=USCI_A0_vector _中断 void USCI_A0_ISR (void) { 开关(__evo_in_range (UCA0IV、USCI_UART_UCTXCPTIFG)) { USCI_NONE 案例: 中断; USCI_UART_UCRXIFG 案例: RXData = EUSCI_A_UART_receiveData (EUSCI_A0_BASE); GPIO_toggleOutputOnPin (GPIO_PORT_P1、GPIO_PIN1); 交换机(RXData) { 案例"A": EUSCI_A_UART_transmitData (EUSCI_A0_BASE、"h"); EUSCI_A_UART_transmitData (EUSCI_A0_BASE、"I"); EUSCI_A_UART_transmitData (EUSCI_A0_BASE、"0"); EUSCI_A_UART_transmitData (EUSCI_A0_BASE、"1"); 中断; 默认值: EUSCI_A_UART_transmitData (EUSCI_A0_BASE、RXData); 中断; } 中断; USCI_UART_UCTXIFG 案例: 中断; USCI_UART_UCSTTIFG 案例: 中断; USCI_UART_UCTXCPTIFG 案例: 中断; } }
谢谢你。
在9600时发送5个字节应该大约为5ms、这不应该干扰任何东西。
您是否在调试器中运行此操作? 尝试断开调试器(红色框中的按钮)。 许多(大多数? 全部?) 当调试器处于活动状态时、MSP430 Launchpad 会呈现突发反向通道 UART 输出。 USB 缓冲。
https://e2e.ti.com/support/microcontrollers/msp430/f/166/p/718867/2690901
谢谢、断开调试器可解决 UART 速度问题。