Связь по UART dsPIC33EP256MU810

Я новичок в программировании микроконтроллеров.

я использую

  • MplabX v3.26 как IDE
  • Компилятор XC16
  • ВЫБРАТЬ 3
  • p33EP256MU810 (dspic)

для программирования

Я написал очень простую программу для мигания светодиода и отправки нескольких символов через 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;
}

Мигающая часть светодиода работает отлично, но я получаю символы мусора на другом конце UART, где я использую инструмент последовательного монитора (X-CTU) для мониторинга данных.

Моя основная проблема в том, что я не могу рассчитать скорость передачи. Пожалуйста, дайте мне знать, если я делаю что-то не так.

Спасибо


person amg    schedule 22.03.2016    source источник


Ответы (2)


  1. Очистите регистр ANSELx для установки цифровых контактов вместо записи в PADCFG1
  2. Играйте со скоростью передачи. Последний параметр в процедуре OpenUART1 указывает значение U1BRG в соответствии с описанием инструмента dsPic на стр. 147 Вы также можете настроить скорость передачи данных вручную, добавив U1BRG = value; сразу после выполнения OpenUART1. Какое значение передается в UxBRG, зависит от тактовой частоты и желаемой скорости передачи данных, более подробную информацию см. В руководстве для USART стр. 9. Обратите внимание, что при ручной настройке скорости передачи также необходимо установить или сбросить U1MODE.BRGH бит.
person Vladimir Tsykunov    schedule 24.03.2016

«Моя основная проблема в том, что я не могу рассчитать скорость передачи данных. Пожалуйста, дайте мне знать, если я делаю что-то не так».

Я не знаю, какая скорость требуется, но:

  1. При расчете UxBRG, пожалуйста, позаботьтесь о настройке часов (осциллятора) (поскольку вы используете _FOSCSEL(FNOSC_FRCPLL) с включенной ФАПЧ).

  2. Проблема, которую вы описали, звучит как неправильный расчет скорости передачи (включая осциллятор), или возможно, что настройка порта неверна (биты данных, четность, стоповые биты).

Надеюсь это поможет...

person Darko Djuric    schedule 01.04.2016