¿Cómo configurar correctamente dsPIC para recibir la señal UART?

1

Quiero usar Proteus para simular la transmisión de datos UART, voy a abrir dos puertos COM virtuales y conectarlos.

Entonces, primero uso el Emulador de Puertos Seriales Virtuales para abrir puertos COM virtuales:

Segundo,usoeltérminoteraparaserCOM1:

Tercero, mi circuito en Proteus será COM2:

YpuseelCOMPIMenelcircuitocomoCOM2,velocidaddetransmisión9600.

El código del chip dsPIC en Proteus:

void main() {
     Unlock_IOLOCK();//unlock
     PPS_Mapping_NoLock(0, _INPUT, _U1RX);//Set UART1 Rx be pin RP0
     PPS_Mapping_NoLock(1, _OUTPUT, _U1TX);//Set UART1 Tx be pin RP1
     Lock_IOLOCK();//lock

     UART1_Init(9600);//Set Baud Rate
     Delay_ms(100);//Let UART initialize
     while(1)
     {
            unsigned receive;
            if (UART1_Data_Ready())
            {
              receive = UART1_Read(); 
              UART1_Write(receive); //The result should be sent back to COM1
            }
     }
}

Luego comencé la simulación de Proteus, luego escribí un carácter 'o' en el término tera. Como puede ver, el terminal virtual en Proteus ha recibido 'o', por lo que los puertos COM virtuales funcionan bien. Pero dsPIC parece perder la lectura de la 'o', por lo que no puede enviarlo a COM1.

Sicambiéelcódigoyreiniciélasimulación

voidmain(){Unlock_IOLOCK();//unlockPPS_Mapping_NoLock(0,_INPUT,_U1RX);//SetUART1RxbepinRP0PPS_Mapping_NoLock(1,_OUTPUT,_U1TX);//SetUART1TxbepinRP1Lock_IOLOCK();//lockUART1_Init(9600);//SetBaudRateDelay_ms(100);//LetUARTinitializewhile(1){unsignedreceive;UART1_Write('a');if(UART1_Data_Ready()){receive=UART1_Read();UART1_Write(receive);//TheresultshouldbesentbacktoCOM1}}}

Puedover'a'enviadopordsPICenteratérmino:

Entonces, UART_Write () parece estar bien, no sé por qué dsPIC no puede leer datos de COM1. Tal vez configuré algo mal.

    
pregunta Po-Jen Lai

1 respuesta

1

He intentado su código. El problema es que los pines RB0 y RB1 también son AN2 y AN3. Por lo tanto hay que configurarlos en digital. Agregue esta línea al comienzo de su código:

ADPCFG = 0xFFFF

y luego el pin Rx puede recibir los datos correctamente.

BTW. He intentado el comentario de PeterJ pero no parece ser la parte crucial de este problema. El diseño original de su circuito funciona bien una vez que configura el pin analógico a digital.

    
respondido por el AlbertK

Lea otras preguntas en las etiquetas