Embedded dsPIC33EP128MC202通用异步收发器不';行不通

Embedded dsPIC33EP128MC202通用异步收发器不';行不通,embedded,uart,dspic,Embedded,Uart,Dspic,我为UART通信编写了代码。TX工作正常,但RX不工作。我找了很多,但没有找到解决办法 我以时间间隔将字符x传输到PC,并且我能够看到数据。但在传输数据时pic并没有接收到任何东西 下面是用于uart //PGEC1/AN4/C1IN1+/RPI34/RB2 for receiver RPINR18bits.U1RXR = 34; //RP36/RB4 for transmitting data RPOR1bits.RP36R = 1; 我可以将数据传输到pc,但PIC没有从

我为
UART
通信编写了代码。TX工作正常,但RX不工作。我找了很多,但没有找到解决办法

我以时间间隔将字符x传输到PC,并且我能够看到数据。但在传输数据时pic并没有接收到任何东西

下面是用于
uart

//PGEC1/AN4/C1IN1+/RPI34/RB2   for receiver
 RPINR18bits.U1RXR = 34;  

//RP36/RB4   for transmitting data
RPOR1bits.RP36R = 1; 
我可以将数据传输到pc,但PIC没有从pc接收任何字符。 提前谢谢

这是我的密码。 DSPIC33EP128MC202

    /*
 * File:   newmainXC16.c
 * Author:
 *
 * Created on 27 December, 2017, 4:21 PM
 */

// FICD
#pragma config ICS = PGD3               // ICD Communication Channel Select bits (Communicate on PGEC3 and PGED3)
#pragma config JTAGEN = OFF             // JTAG Enable bit (JTAG is disabled)

// FPOR
#pragma config ALTI2C1 = OFF            // Alternate I2C1 pins (I2C1 mapped to SDA1/SCL1 pins)
#pragma config ALTI2C2 = OFF            // Alternate I2C2 pins (I2C2 mapped to SDA2/SCL2 pins)
#pragma config WDTWIN = WIN25           // Watchdog Window Select bits (WDT Window is 25% of WDT period)

// FWDT
#pragma config WDTPOST = PS32768        // Watchdog Timer Postscaler bits (1:32,768)
#pragma config WDTPRE = PR128           // Watchdog Timer Prescaler bit (1:128)
#pragma config PLLKEN = ON              // PLL Lock Enable bit (Clock switch to PLL source will wait until the PLL lock signal is valid.)
#pragma config WINDIS = OFF             // Watchdog Timer Window Enable bit (Watchdog Timer in Non-Window mode)
#pragma config FWDTEN = OFF             // Watchdog Timer Enable bit (Watchdog timer enabled/disabled by user software)

// FOSC
#pragma config POSCMD = NONE            // Primary Oscillator Mode Select bits (Primary Oscillator disabled)
#pragma config OSCIOFNC = ON           // OSC2 Pin Function bit (OSC2 is clock output)
#pragma config IOL1WAY = ON             // Peripheral pin select configuration (Allow only one reconfiguration)
#pragma config FCKSM = CSDCMD           // Clock Switching Mode bits (Both Clock switching and Fail-safe Clock Monitor are disabled)

// FOSCSEL
#pragma config FNOSC = FRCPLL           // Oscillator Source Selection (Fast RC Oscillator with divide-by-N with PLL module (FRCPLL) )
#pragma config PWMLOCK = ON             // PWM Lock Enable bit (Certain PWM registers may only be written after key sequence)
#pragma config IESO = ON                // Two-speed Oscillator Start-up Enable bit (Start up device with FRC, then switch to user-selected oscillator source)

// FGS
#pragma config GWRP = OFF               // General Segment Write-Protect bit (General Segment may be written)
#pragma config GCP = OFF                // General Segment Code-Protect bit (General Segment Code protect is Disabled)


#include "xc.h"
#include <stdint.h>
#include <p33EP128MC202.h>


#define FP 60000000
#define BAUDRATE 115200
#define BRGVAL ((FP/BAUDRATE)/16)-1
#define DELAY_100uS asm volatile ("REPEAT, #5400"); Nop(); // 100uS delay


int main(void)
{
    uint8_t c;
    int i,j,a,b;

    // Configure Oscillator to operate the device at 60Mhz
    // Fosc= Fin*M/(N1*N2), Fcy=Fosc/2
    // Fosc= 8M*60/(2*2)=120Mhz for 8M input clock  == 8*60/4 = 120/2 = 60

 CLKDIVbits.PLLPOST=0;       // PLLPOST (N1) 0=/2 
 while(!OSCCONbits.LOCK);    // wait for PLL ready
    PLLFBD = 58;                        // M=60
    CLKDIVbits.PLLPOST = 0;             // N1=2
    CLKDIVbits.PLLPRE = 0;              // N2=2
    OSCTUN = 0;                         // Tune FRC oscillator, if FRC is used

    /*Initialize the Ports */
    TRISA = 0x00;
    LATA = 0x0000;
    PORTA = 0x0000;
    ANSELAbits.ANSA1 = 0;
    ANSELAbits.ANSA0 = 0;


    __builtin_write_OSCCONL(OSCCON & ~(1<<6));
    RPINR18bits.U1RXR = 34;
    RPOR1bits.RP36R = 1;
    __builtin_write_OSCCONL(OSCCON | (1<<6));

    U1MODEbits.STSEL = 0; 
    U1MODEbits.PDSEL = 0; 
    U1MODEbits.ABAUD = 0; 
    U1MODEbits.BRGH = 0;
    U1BRG = 30;
    U1MODEbits.UARTEN = 1; 
    IEC0bits.U1TXIE = 0;

    U1STAbits.UTXEN = 1;
    U1STAbits.URXISEL = 0; 



    DELAY_100uS;
    DELAY_100uS;
    DELAY_100uS;
    U1TXREG = 'X';

    char ReceivedChar;

  while(1){

    //If data is received send data to TX  
    if(U1STAbits.URXDA == 1) {
        ReceivedChar = U1RXREG + 2; 
        U1TXREG = 10;
        U1TXREG = 13;
    }
    for(i=0;i<1000;i++){
          a = a + 1;
          for(j=0;j<2000;j++){
              b = b  + 1;
          }
    }
    //LED Blink code for programme check
    if(c == 0){
          c = 1;
    }else{
          c = 0;
    }
    LATAbits.LATA0 = c; 
    LATAbits.LATA1 = c; 
    U1TXREG = 'x';
    U1TXREG = 10;
    U1TXREG = 13;
  }

}


 void __attribute__((interrupt, no_auto_psv)) _U1TXInterrupt( void ) 
 { 
    IFS0bits.U1TXIF = 0; // Clear TX Interrupt flag 
 } 
 void __attribute__((interrupt, no_auto_psv)) _U1RXInterrupt( void ) 
 { 
     IFS0bits.U1RXIF = 0; // Clear RX Interrupt flag 
 //cntr++; 
    U1TXREG='a'; 
    U1TXREG = 10;
      U1TXREG = 13;

 } 
/*
*文件:newmainXC16.c
*作者:
*
*创建于2017年12月27日下午4:21
*/
//FICD
#pragma config ICS=PGD3//ICD通信信道选择位(在PGEC3和PGED3上通信)
#pragma config JTAGEN=OFF//JTAG启用位(JTAG被禁用)
//FPOR
#pragma-config-ALTI2C1=OFF//备用I2C1引脚(I2C1映射到SDA1/SCL1引脚)
#pragma-config-ALTI2C2=OFF//备用I2C2引脚(I2C2映射到SDA2/SCL2引脚)
#pragma config WDTWIN=WIN25//看门狗窗口选择位(WDT窗口为WDT周期的25%)
//FWDT
#pragma config WDTPOST=PS32768//看门狗定时器后置定标器位(1:32768)
#pragma config WDTPRE=PR128//看门狗定时器预分频器位(1:128)
#pragma config PLLKEN=ON//PLL锁定启用位(时钟切换至PLL源将等待PLL锁定信号有效。)
#pragma config WINDIS=OFF//看门狗定时器窗口启用位(非窗口模式下的看门狗定时器)
#pragma config FWDTEN=OFF//看门狗定时器启用位(用户软件启用/禁用看门狗定时器)
//FOSC
#pragma config POSCMD=NONE//主振荡器模式选择位(主振荡器禁用)
#pragma config OSCIOFNC=ON//OSC2引脚功能位(OSC2为时钟输出)
#pragma config IOL1WAY=ON//外围引脚选择配置(仅允许一次重新配置)
#pragma config FCKSM=CSDCMD//时钟切换模式位(时钟切换和故障安全时钟监视器均被禁用)
//福塞尔
#pragma config FNOSC=FRCPLL//振荡器源选择(带PLL模块(FRCPLL))的带N除法的快速RC振荡器)
#pragma config PWMLOCK=ON//PWM锁启用位(某些PWM寄存器只能在按键顺序后写入)
#pragma config IESO=ON//双速振荡器启动启用位(使用FRC启动设备,然后切换到用户选择的振荡器源)
//FGS
#pragma config GWRP=OFF//通用段写保护位(可以写入通用段)
#pragma config GCP=OFF//通用段代码保护位(禁用通用段代码保护)
#包括“xc.h”
#包括
#包括
#定义FP 60000000
#定义波特率115200
#定义BRGVAL((FP/BAUDRATE)/16)-1
#定义延迟_100usASM volatile(“重复,#5400”);Nop();//100秒延迟
内部主(空)
{
uint8_t c;
int i,j,a,b;
//将振荡器配置为在60Mhz下操作设备
//Fosc=Fin*M/(N1*N2),Fcy=Fosc/2
//对于8M输入时钟,Fosc=8M*60/(2*2)=120Mhz==8*60/4=120/2=60
CLKDIVbits.PLLPOST=0;//PLLPOST(N1)0=/2
while(!OSCCONbits.LOCK);//等待PLL就绪
PLLFBD=58;//M=60
CLKDIVbits.PLLPOST=0;//N1=2
CLKDIVbits.PLLPRE=0;//N2=2
OSCTUN=0;//如果使用FRC,则调谐FRC振荡器
/*初始化端口*/
TRISA=0x00;
LATA=0x0000;
PORTA=0x0000;
ANSELAbits.1=0;
ANSELAbits.0=0;

__内置编写OSCCONL(OSCCON&~(1我查看了代码,它对我来说很好用


请检查与外围设备及其pin的连接。如果与该pin有额外连接,请将其删除,然后重试。

RB2应为输入

TRISB = 0x04;