Communication UART通信dsPIC33EP256MU810

Communication UART通信dsPIC33EP256MU810,communication,microcontroller,uart,baud-rate,dspic,Communication,Microcontroller,Uart,Baud Rate,Dspic,我对微控制器编程非常陌生 我正在使用 MplabX v3.26作为IDE XC16编译器 PICKit 3 p33EP256MU810(dspic) 用于编程 我已经编写了一个非常简单的程序来闪烁LED并通过UART发送几个字符,请参考以下源代码: #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 //配置设置 _FOSC(FNOSC_frcpl); _FWDT(FWDTEN_关闭); int main() { //使所有管脚数字化 PADCFG1=0xFFFF

我对微控制器编程非常陌生

我正在使用

  • MplabX v3.26作为IDE
  • XC16编译器
  • PICKit 3
  • p33EP256MU810(dspic)
用于编程

我已经编写了一个非常简单的程序来闪烁LED并通过UART发送几个字符,请参考以下源代码:

#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
//配置设置
_FOSC(FNOSC_frcpl);
_FWDT(FWDTEN_关闭);
int main()
{    
//使所有管脚数字化
PADCFG1=0xFFFF;
//设定方向
TRISCbits.TRISC2=0;
//初始化UART1
iPPSOutput(输出引脚PPS RP68,输出引脚PPS RP1TX);
//关闭UART
CloseUART1();
//开放式UART
OpenUART1(UART_EN&UART_IDLE_CON&UART_DIS_WAKE&UART_DIS_LOOPBACK&UART_DIS_ABAUD&UART_NO_paru 8BIT&UART_1STOPBIT,
UART\u TX\u启用和UART\u INT\u TX和UART\u ADR\u检测\u DIS,
15);
而(1)
{
//打开led
LATCbits.LATC2=1;
__延迟32(3750000);//~1秒延迟
//关闭led
LATCbits.LATC2=0;
__延迟32(3750000);//~1秒延迟
//传输数据
while(BusyUART1());//哭到有空为止
WriteUART1(0x55);
WriteUART1(0xaa);
while(BusyUART1());//哀号,直到发送完所有字节
}
返回0;
}
LED闪烁部分工作正常,但我在UART的另一端接收垃圾字符,在那个里我使用串行监控工具(X-CTU)监控数据


我的主要问题是我不能计算波特率。如果我做错了什么,请告诉我

多谢各位

  • 清除ANSELx寄存器以将管脚设置为数字,而不是写入PADCFG1
  • 播放波特率。根据第147页,程序OpenUART1中的最后一个参数指定U1BRG值。 您也可以通过添加
    U1BRG=value手动设置波特率在执行OpenUART1之后。
    传递给UxBRG的值取决于时钟速度和期望的波特率,更多细节见第9页。请注意,如果手动设置波特率,还需要设置或清除
    U1MODE.BRGH
    “我的主要问题是我无法计算波特率。如果我做错了什么,请告诉我。”

    我不知道期望的波特率是多少,但:

  • 在进行UxBRG计算时,请注意时钟(振荡器)设置(因为您使用的是启用PLL的
    \u FOSCSEL(FNOSC\u FRCPLL)

  • 您描述的问题听起来像是错误的波特率(包括振荡器)计算,或者可能是端口设置错误(数据位、奇偶校验、停止位)

  • 希望这有助于