打印
[NUC120]

谁能帮我看下这个uart代码哪里有问题啊

[复制链接]
1741|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
stul海盗|  楼主 | 2014-2-25 10:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是NUC120的,可有人知道问题出在哪里了啊,能进中断,但是读到的都是0,发出来的自然也是0


uint32_t uart_buf[64];
uint8_t uart_flag=0;


/****************************************************************************
* 名    称:void Init_Uart(void)
* 功    能:串口初始化
* 入口参数:无
* 出口参数:无
****************************************************************************/
void Init_Uart(void)
{        
        SYSCLK->CLKSEL1.UART_S= 0x00;       //选择外部12M为时钟源
        SYS->GPBMFP.UART0_RX=1;            
        SYS->GPBMFP.UART0_TX=1;            //配置PB0,PB1为RX0,TX0
        
        SYS->IPRSTC2.UART0_RST=  1;
        SYS->IPRSTC2.UART0_RST=  0;         //复位UART0
        SYSCLK->APBCLK.UART0_EN= 1;         //使能UART0时钟

        SYSCLK->CLKDIV.UART_N=0;
        //UART0->BAUD= (2<<28) |(12000000/115200)-2;
        UART0->BAUD.DIV_X_EN =1;
        UART0->BAUD.DIV_X_ONE=1;
        UART0->BAUD.BRD = ((12000000/115200)-2);  //设置波特率为115200
        UART0->LCR.NSB =0;  
        UART0->LCR.WLS=3;
        UART0->LCR.PBE=0;        //1个停止位,数据长度8位,无奇偶校验
        

  UART0->FCR.RFITL=0;

        UART0->IER.RDA_IEN=1;    //接收数据中断使能
        NVIC_EnableIRQ(UART0_IRQn);
        
        
}


/****************************************************************************
* 名    称:void UART_Read(uint32_t        *pu8RxBuf,uint32_t u32ReadBytes)
* 功    能:从串口缓存读取数据
* 入口参数:*pu8RxBuf :要读入的缓存
            u32ReadBytes :读多少个(64)
*出口参数:无
****************************************************************************/
void UART_Read(uint32_t        *pu8RxBuf,uint32_t u32ReadBytes)
{
  uint32_t i;
        for(i=0;i<u32ReadBytes;i++)
        {
     pu8RxBuf[i]= UART0->u32DATA;
                //*(pu8RxBuf+i)= UA0_RBR;
  }
}

/****************************************************************************
* 名    称:void UART_Write(uint32_t        *pu8TxBuf,         uint32_t u32WriteBytes)
* 功    能:往串口缓存写数据
* 入口参数:*pu8RxBuf :要写入的缓存
            u32ReadBytes :写多少个(64)
* 出口参数:无
****************************************************************************/
void UART_Write(uint32_t        *pu8TxBuf,         uint32_t u32WriteBytes)
{
  uint32_t i;
        for(i=0;i<u32WriteBytes;i++)
        {
    UART0->u32DATA = pu8TxBuf[i];
                //UA0_THR   = *(pu8TxBuf +i);
  }
}

/****************************************************************************
* 名    称:void UART02_IRQHandler(void)
* 功    能:中断服务子程序
* 入口参数:无
* 出口参数:无            

****************************************************************************/
void UART02_IRQHandler(void)
{

        
  if(UART0->ISR.RDA_INT==1)
        {
               
     while(UART0->FSR.RX_EMPTY==0)   
                 {
       UART_Read(uart_buf,64);
                 }
               
        }
        uart_flag=1;
}



----------------------------------------------main.c----------------------------------------
extern uint32_t uart_buf[64];
extern uint8_t uart_flag;

int32_t main (void)
{
  while(1)
   {
   
        
          if(uart_flag==1)
                        {
         uart_flag=0;
                         UART_Write(uart_buf,64);
               
            Delay_ms(1000);
      }
        
                 
                 
               
   }
}
这段代码能进入接收数据中断,但是发出来的数据全是0,好蛋疼啊

相关帖子

沙发
stul海盗|  楼主 | 2014-2-25 10:48 | 只看该作者
高手都去哪里了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

40

帖子

0

粉丝