Hallo, ich verwende dsPIC30F4013 und habe versucht, uart mit pic zu verbinden. Ich möchte einige Daten über uart an den PC senden und auf dem Terminal anzeigen, aber was ich bekomme, ist weit von dem entfernt, was ich erwarte, um genau zu sein, ich bekomme Unsinn. Ich verwende das USB Serial Converter-Modul FTD232RL, um die MCU mit dem PC zu verbinden. Ich dachte zuerst, es könnte ein Unterschied in der Baudrate sein, aber ich habe es noch einmal überprüft und sogar verschiedene Baudraten ausprobiert, aber das Ergebnis ist das gleiche. Ich habe meinen Code unten gepostet. Was könnte ein Problem sein und wie kann es behoben werden? Vielen Dank im Voraus.
#include <xc.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <p30fxxxx.h>
#include "uart.h"
_FOSC(CSW_FSCM_OFF & XT_PLL4);
_FWDT(WDT_OFF);
_FBORPOR(MCLR_DIS);
#define period 7372
unsigned int counter;
void initTMR1(void)
{
TMR1 = 0;
PR1 = period;
IFS0bits.T1IF = 0;
IEC0bits.T1IE = 1;
T1CONbits.TON = 1;
}
void delay_ms(unsigned int time)
{
counter = 0;
while (counter < time);
}
void initUART()
{
U1BRG = 0x0040; //baud rate 9600
U1MODEbits.ALTIO = 1;
IEC0bits.U1RXIE = 1;
U1STA &= 0xfffc;
U1MODEbits.UARTEN = 1;
U1STAbits.UTXEN = 1;
}
void writeUART(unsigned int data)
{
while(U1STAbits.TRMT == 0);
if(U1MODEbits.PDSEL == 3)
U1TXREG = data;
else
U1TXREG = data & 0xFF;
}
void RS232_putst(register const char *str)
{
while((*str)!=0)
{
WriteUART(*str);
str++;
}
}
void __attribute__((interrupt, no_auto_psv)) _T1Interrupt(void)
{
TMR1 = 0;
counter++;
IFS0bits.T1IF = 0;
}
int main(void)
{
ADPCFGbits.PCFG9 = 1;
TRISBbits.TRISB9 = 0;
LATBbits.LATB9 = 0;
initUART();
initTMR1();
RS232_putst("START");
delay_ms(2000);
while(1)
{
RS232_putst(00000);
RS232_putst("This is test!!");
LATBbits.LATB9 = ~LATBbits.LATB9;
delay_ms(1000);
}
return 0;
}
Ich finde es heraus, also ist hier eine Lösung, falls jemand jemals auf dieses Problem stoßen sollte. Der Grund, warum ich am Terminal Unsinn bekomme, liegt an der Stromversorgung, nicht an der Baudrate. Alle diese Module verbrauchen eine bestimmte Menge Strom, und sie erhalten nicht genug Strom, um ihre Funktion zu erfüllen, und es kann vorkommen, dass diese Art von Problemen verursacht werden. Um dies zu beheben, müssen Sie ein Netzteil mit Spannungsregler verwenden oder selbst herstellen, um genügend Strom für Ihre Schaltung sicherzustellen.
Hast du einen Umfang? Ich mache dieses Setup wiederholt mit PICs und folge immer denselben Schritten:
Wenn es ein Problem gibt, werden die Bits invertiert, was leicht in der Software behoben werden kann. Wenn alles funktioniert, schiebe ich die Baudrate normalerweise auf etwa 38400. Geht bei mir immer einwandfrei.
Tony Stewart EE75
AF
Tony Stewart EE75
AF
Indraneel
Chris Stratton
Tony Stewart EE75
Tony Stewart EE75
AF