这是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,好蛋疼啊 |