初级会员

- 积分
- 84
- 金钱
- 84
- 注册时间
- 2016-9-1
- 在线时间
- 60 小时
|
100金钱
串口4初始化
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口时钟
RCC->APB1ENR|=1<<19; //使能串口4时钟
GPIOC->CRH&=0XFFFF00FF; //IO状态设置
GPIOC->CRH|=0X00008B00; //IO状态设置
RCC->APB1RSTR|=1<<19; //复位串口4
RCC->APB1RSTR&=~(1<<19);//停止复位4
//波特率设置
UART4->BRR=mantissa; // 波特率设置
UART4->CR1|=0X200C; //1位停止,无校验位. 0000 0000 0000 0000 0010 0000 0000 1100
// UART4->CR1|=0X208C; //1位停止,无校验位. 0000 0000 0000 0000 0010 0000 1000 1100 发送中断使能
UART4->CR1|=1<<8; //PE中断使能 校验错误进入中断
UART4->CR2&=0<<12; //PE中断使能 校验错误进入中断
// UART4->CR1|=1<<5; //接收缓冲区非空中断使能
UART4->CR1|=1<<4; //串口4使用DMA2通道3接收 串口空闲中断
UART4->CR3|=1<<6; //DMA使能接收
MY_NVIC_Init(3,2,UART4_IRQChannel,2);//组2,最低优先级
}
DMA接收初始化
void MYDMA_RX_Config(DMA_Channel_TypeDef*DMA_CHx,u32 cpar,u32 cmar,u16 cndtr)
{
RCC->AHBENR|=1<<0; //开启DMA1时钟
RCC->AHBENR|=1<<1; //开启DMA2时钟
delay_ms(5); //等待DMA时钟稳定
DMA_CHx->CPAR=cpar; //DMA1 外设地址
DMA_CHx->CMAR=(u32)cmar; //DMA1,存储器地址
DMA_CHx->CNDTR=cndtr; //DMA1,传输数据量
DMA_CHx->CCR=0X00000000; //复位
DMA_CHx->CCR|=0<<4; //从外设读
DMA_CHx->CCR|=0<<5; //普通模式
DMA_CHx->CCR|=0<<6; //外设地址非增量模式
DMA_CHx->CCR|=1<<7; //存储器增量模式
DMA_CHx->CCR|=0<<8; //外设数据宽度为8位
DMA_CHx->CCR|=0<<10; //存储器数据宽度8位
DMA_CHx->CCR|=1<<12; //中等优先级
DMA_CHx->CCR|=0<<14; //非存储器到存储器模式
DMA_CHx->CCR|=1<<0; //DMA通道开启
MY_NVIC_Init(3,1,DMA2_Channel3_IRQChannel,2);//抢占1,子优先级3,组2
}
串口中断接收数据
u8 uart4_receive;//换存变量
u8 num;
if(UART4->SR&(1<<4))//接收到数据
{
uart4_receive=UART4->DR;
num=UART4->SR;
num=UART4->DR; //清除串口空闲标志
DMA2_Channel3->CCR&=~(1<<0); //关闭DMA传输
DMA_USART4.Rx_len = USART_Rx_Tx_Len - DMA2_Channel3->CNDTR; //获得接收到的字节数
DMA2_Channel3->CNDTR=USART_Rx_Tx_Len;
DMA_USART4.Rx_flag = 1;//标记接收成功
DMA2_Channel3->CCR|=1<<0; // DMA 开启,等待数据。
printf("串口接收到的数据长度:%d\r\n",DMA_USART4.Rx_len);
printf("串口接收到的数据:%s\r\n",DMA_USART4.DMA_Rece_Buf);
}
通道初始化
MYDMA_RX_Config(DMA2_Channel3,(u32)&UART4->DR,(u32)DMA_USART4.DMA_Rece_Buf,USART_Rx_Tx_Len);
串口1接收到的数据
串口接收到的数据长度:0
串口接收到的数据:
问题:
串口接收不到数据
|
|