2016-03-22 8 views
1

Я очень много нового для программирования микроконтроллеров.UART-связь dsPIC33EP256MU810

Я использую

  • MplabX v3.26, как IDE
  • XC16 компилятор
  • PICkit 3
  • p33EP256MU810 (DSPIC)

для программирует

I написали очень простую программу для мигания светодиодов и конец несколько символов через 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) для мониторинга данных.

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

Спасибо

ответ

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

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

Я не знаю, что желательно, но скорость передачи данных:

  1. При составлении расчета UxBRG, пожалуйста, позаботьтесь, чтобы часы (генератор) настройки (так как вы используете _FOSCSEL(FNOSC_FRCPLL) с включенным PLL).

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

Надеется, что это помогает ...