我对微控制器编程非常陌生。
我正在使用
- MplabX v3.26 作为 IDE
- XC16编译器
- 拾取 3
- p33EP256MU810 (DSPIC)
用于编程
我编写了非常简单的程序来闪烁 LED 并通过 UART 发送几个字符,请参阅以下源代码:
#include <p33Exxxx.h>
#include <p33EP256MU810.h>
#include <libpic30.h>
#include <uart.h>
#include <stdlib.h>
#include <stdio.h>
#include <pps.h>
#include <xc.h>
#include <stdint.h>
// Configuration settings
_FOSC(FNOSC_FRCPLL);
_FWDT(FWDTEN_OFF);
int main()
{
//make all pins digital
PADCFG1 = 0xFFFF;
//set direction
TRISCbits.TRISC2 = 0;
//Initialze UART1
iPPSOutput(OUT_PIN_PPS_RP68, OUT_FN_PPS_U1TX);
//close UART
CloseUART1();
//open UART
OpenUART1( UART_EN & UART_IDLE_CON & UART_DIS_WAKE & UART_DIS_LOOPBACK & UART_DIS_ABAUD & UART_NO_PAR_8BIT & UART_1STOPBIT,
UART_TX_ENABLE & UART_INT_TX & UART_ADR_DETECT_DIS,
15);
while (1)
{
//turn on led
LATCbits.LATC2 = 1;
__delay32(3750000); // ~1 sec delay
//turn off led
LATCbits.LATC2 = 0;
__delay32(3750000); // ~1 sec delay
//Transmit data
while(BusyUART1()); //Wail till available
WriteUART1(0x55);
WriteUART1(0xaa);
while(BusyUART1()); //Wail till all bytes sent
}
return 0;
}
LED闪烁部分工作正常,但我在UART的另一端收到垃圾字符,我正在使用串行监视器工具(X-CTU)来监视数据。
我的主要问题是我无法计算波特率。如果我做错了什么,请告诉我。
谢谢
- 清除ANSELx寄存器以设置数字引脚,而不是写入PADCFG1
- 玩波特率。过程 OpenUART1 中的最后一个参数根据 dsPic 工具描述页 147 指定 U1BRG 值。您还可以在执行 OpenUART1 后立即手动设置波特率添加
U1BRG = value;
。传递给 UxBRG 的值取决于时钟速度和所需的波特率,USART 第 9 页的手册中有更多详细信息。请注意,如果手动设置波特率还需要设置或清除U1MODE.BRGH
位。
"我的主要问题是我无法计算波特率。如果我做错了什么,请告诉我。
我不知道什么是所需的波特率,但是:
-
在进行 UxBRG 计算时,请注意时钟(振荡器)设置(因为您使用的是启用 PLL 的
_FOSCSEL(FNOSC_FRCPLL)
)。 -
您描述的问题听起来像是错误的波特率(包括振荡器)计算,或者可能是端口设置错误(数据位、奇偶校验、停止位)。
希望这有帮助...