【问题标题】:UART communication dsPIC33EP256MU810UART 通信 dsPIC33EP256MU810
【发布时间】:2016-07-09 09:58:30
【问题描述】:

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

我正在使用

  • MplabX v3.26 作为 IDE
  • XC16 编译器
  • PICKit 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 闪烁部分工作正常,但我在使用串行监控工具 (X-CTU) 监控数据的 UART 另一端收到垃圾字符。

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

谢谢

【问题讨论】:

    标签: communication microcontroller uart baud-rate dspic


    【解决方案1】:
    1. 清除 ANSELx 寄存器以将引脚设置为数字,而不是写入 PADCFG1
    2. 以波特率播放。过程 OpenUART1 中的最后一个参数根据 dsPic tool description 第 147 页指定 U1BRG 值。 您也可以在执行 OpenUART1 后手动添加U1BRG = value; 来设置波特率。 传递给 UxBRG 的值取决于时钟速度和所需的波特率,更多详细信息请参见第 9 页 manual for USART。请注意,如果手动设置波特率,还需要设置或清除 U1MODE.BRGH 位。

    【讨论】:

      【解决方案2】:

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

      我不知道需要什么波特率,但是:

      1. 在进行 UxBRG 计算时,请注意时钟(振荡器)设置(因为您使用的是启用了 PLL 的 _FOSCSEL(FNOSC_FRCPLL))。

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

      希望这会有所帮助...

      【讨论】:

        猜你喜欢
        • 2013-03-28
        • 2021-03-12
        • 1970-01-01
        • 2020-12-24
        • 1970-01-01
        • 2019-06-15
        • 1970-01-01
        • 2022-11-23
        • 1970-01-01
        相关资源
        最近更新 更多