配置如下,验证了能发送成功,但是接收的时候接收不到数据,没有进入接收中断,有没有人知道是什么原因?
#ifdef EN_UART4_RX //如果使能了接收
//接收缓存区
u8 RS4_RX_BUF[64]; //接收缓冲,最大64个字节.
//接收到的数据长度
u8 RS4_RX_CNT=0;
void UART4_IRQHandler(void)
{
u8 res;
if(UART4->SR&(1<<5))//接收到数据
{
printf("---------44444--------
");
res=UART4->DR;
if(RS4_RX_CNT<64)
{
RS4_RX_BUF[RS4_RX_CNT]=res; //记录接收到的值
RS4_RX_CNT++; //接收数据增加1
}
}
}
#endif
//初始化IO 串口4
//pclk1
CLK1时钟频率(Mhz)
//bound:波特率
void Uart4_Init(u32 pclk1,u32 bound)
{
float temp;
u16 mantissa;
u16 fraction;
temp=(float)(pclk1*1000000)/(bound*16);//得到USARTDIV
mantissa=temp; //得到整数部分
fraction=(temp-mantissa)*16; //得到小数部分
mantissa<<=4;
mantissa+=fraction;
RCC->APB2ENR|=1<<4; //使能PORTC口时钟
GPIOC->CRH&=0XFFFF00FF; //IO状态设置C10,C11
GPIOC->CRH|=0X00008B00; //IO状态设置
RCC->APB1ENR|=1<<19; //使能串口4时钟
RCC->APB1RSTR|=1<<19; //复位串口4
RCC->APB1RSTR&=~(1<<19);//停止复位
//波特率设置
UART4->BRR=mantissa; // 波特率设置
UART4->CR1|=0X200C; //1位停止,无校验位.
#ifdef EN_UART4_RX //如果使能了接收
//使能接收中断
UART4->CR1|=1<<8; //PE中断使能
UART4->CR1|=1<<5; //接收缓冲区非空中断使能
MY_NVIC_Init(3,3,UART4_IRQn,1);//组4,最低优先级
#endif
}
一周热门 更多>