用MSP430F5438A,MCLK和SMCLK都跑到25M,COM0配成115200BPS。但是发现COM0发送时,PC机接收的完全正确,但是PC发送时,MCU收到的却是错误的。用的是TIDriverlib 1.25的代码配的CLK和UART,代码如下:
if(STATUS_FAIL == UART_init( __MSP430_BASEADDRESS_USCI_A0__,
UART_CLOCKSOURCE_SMCLK,
UCS_getSMCLK(__MSP430_BASEADDRESS_UCS__),
115200,
UART_NO_PARITY,
UART_LSB_FIRST,
UART_ONE_STOP_BIT,
UART_MODE,
UART_OVERSAMPLING_BAUDRATE_GENERATION)
我如果把SMCLK换成ACLK,波特率降到1200,收发都是没问题的,说明硬件应该没问题。那为什么会这样呢?哪位达人也碰到这种问题?给个提示吧。
Becca Jet:
非常奇怪。我是基于freertos写的串口程序。发现如果在freertos的task启动前给while(1)下来,接收是没问题的。但是如果启动了task,哪怕我PC只发送一个字节,MCU接收中断里的数据也是错误的。所以基本肯定是freertos影响了我的接收。但是非常奇怪啊,freertos我写的那些个task,没有任何跟串口有关的代码啊?怎么会影响我的接收中断呢?
Leon Yan:
回复 Becca Jet:
你好,下面是一些建议:
1. MCU的晶振是内部还是外部?
2. 如果使用了RTOS,Timer中断肯定一直在调度任务,所以有可能打断UART接收;
3. 多个任务都在运行的时候,是不是有多个中断?
谢谢。