请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSPM0G1507 主题中讨论的其他器件:MSPM0G3507
工具与软件:
您好!
我正在使用 MSPM0G3507 LaunchPad 对 UART 进行编程。 我使用的是"uart_echo_interrupts_standby_LP_MSPM0G3507_nortos_ticlang"。
我尝试从坞站灯 02 01 00 13 00 25 3D FC 发送以下消息、我可以在 UART 中断中接收相同的消息。
第二条消息是 02 01 00 20 00 0C 3D F6、仅接收部分字节。 消息如图所示。
UART 配置如下:
/* clang-format off */
#define POWER_STARTUP_DELAY (16)
#define CPUCLK_FREQ 32000000
/* Defines for UART_0 */
#define UART_0_INST UART0
#define UART_0_INST_FREQUENCY 32768
#define UART_0_INST_IRQHandler UART0_IRQHandler
#define UART_0_INST_INT_IRQN UART0_INT_IRQn
#define GPIO_UART_0_RX_PORT GPIOB
#define GPIO_UART_0_TX_PORT GPIOB
#define GPIO_UART_0_RX_PIN DL_GPIO_PIN_1
#define GPIO_UART_0_TX_PIN DL_GPIO_PIN_0
#define GPIO_UART_0_IOMUX_RX (IOMUX_PINCM13)
#define GPIO_UART_0_IOMUX_TX (IOMUX_PINCM12)
#define GPIO_UART_0_IOMUX_RX_FUNC IOMUX_PINCM13_PF_UART0_RX
#define GPIO_UART_0_IOMUX_TX_FUNC IOMUX_PINCM12_PF_UART0_TX
#define UART_0_BAUD_RATE (9600)
#define UART_0_IBRD_33_kHZ_9600_BAUD (1)
#define UART_0_FBRD_33_kHZ_9600_BAUD (9)
static const DL_UART_Main_ClockConfig gUART_0ClockConfig = {
.clockSel = DL_UART_MAIN_CLOCK_LFCLK,
.divideRatio = DL_UART_MAIN_CLOCK_DIVIDE_RATIO_1
};
static const DL_UART_Main_Config gUART_0Config = {
.mode = DL_UART_MAIN_MODE_NORMAL,
.direction = DL_UART_MAIN_DIRECTION_TX_RX,
.flowControl = DL_UART_MAIN_FLOW_CONTROL_NONE,
.parity = DL_UART_MAIN_PARITY_NONE,
.wordLength = DL_UART_MAIN_WORD_LENGTH_8_BITS,
.stopBits = DL_UART_MAIN_STOP_BITS_ONE
};
SYSCONFIG_WEAK void SYSCFG_DL_UART_0_init(void)
{
DL_UART_Main_setClockConfig(UART_0_INST, (DL_UART_Main_ClockConfig *) &gUART_0ClockConfig);
DL_UART_Main_init(UART_0_INST, (DL_UART_Main_Config *) &gUART_0Config); /*
* Configure baud rate by setting oversampling and baud rate divisors.
* Target baud rate: 9600
* Actual baud rate: 9576.04 */
DL_UART_Main_setOversampling(UART_0_INST, DL_UART_OVERSAMPLING_RATE_3X);
DL_UART_Main_setBaudRateDivisor(UART_0_INST, UART_0_IBRD_33_kHZ_9600_BAUD, UART_0_FBRD_33_kHZ_9600_BAUD);
/* Configure Interrupts */
DL_UART_Main_enableInterrupt(UART_0_INST,DL_UART_MAIN_INTERRUPT_RX);
DL_UART_Main_enable(UART_0_INST);
}
#include "ti_msp_dl_config.h"
#define UART_PACKET_SIZE 8
char rxPacket[UART_PACKET_SIZE];
volatile uint8_t gEchoData = 0;
uint8_t i=0;
int main(void)
{
SYSCFG_DL_init();
NVIC_ClearPendingIRQ(UART_0_INST_INT_IRQN);
NVIC_EnableIRQ(UART_0_INST_INT_IRQN);
//DL_SYSCTL_enableSleepOnExit();
while (1) {
__WFI();
}
}
void UART_0_INST_IRQHandler(void)
{
switch (DL_UART_Main_getPendingInterrupt(UART_0_INST)) {
case DL_UART_MAIN_IIDX_RX:
rxPacket[i++] = DL_UART_Extend_receiveDataBlocking(UART_0_INST);
//rxPacket[i++]= DL_UART_Main_receiveData(UART_0_INST);
//DL_UART_Main_transmitData(UART_0_INST, gEchoData);
break;
default:
break;
}
}
提前感谢。
此致、
Yogesh。