本帖最后由 yangbo18416 于 2015-12-22 16:38 编辑
小弟在这里想请教大家个问题。现在我想利用usart1的错误帧作为某个信号的起始标志。因此我做出如下设置,在usart1->CR3中设置了DMAR标志位以及EIE位(参考手册上说,FE错误帧不会触发中断,但配置了DMAR以及EIE位后,若出现FE错误,也会引起中断),其他设置按照正常串口通讯设置。具体如下void UART0_init(u32 Frq)
{
u16 x1=0; //频率计算的整数部分12位
u16 x2=0; //频率计算的小数部分04位
RCC->APB2ENR |= 0X00004005; //打开AFIOEN复用端口时钟+GPIOA端口时钟+USART1开关
GPIOA->CRH &= ~(0x00000FF0); //复位GPIOA09-GPIOA10号引脚寄存器
GPIOA->CRH |= 0x0000000B0; //设置GPIOA09为第二功能上拉输出50MHz
GPIOA->CRH |= 0x000000800; //设置GPIOA10为浮空输入
GPIOA->ODR |= 0x0000003<<9; //设置为上拉输出或者上拉输入时,需要往对应的输出寄存器内写入1
//波特率为9600bps;8位长度;1个停止位,无校验;禁用硬件流控制;禁止USART时钟;
//时钟极性低;在第2个边沿捕获数据;最后一位数据的时钟脉冲不从SCLK输出
switch (Frq)
{
case 2400 :{x1=1875;x2=0; break;}
case 9600 :{x1=468 ;x2=12; break;}
case 19200 :{x1=234 ;x2=6; break;}
case 57600 :{x1=78 ;x2=2; break;}
case 115200:{x1=39 ;x2=1; break;}
case 250000:{x1=18 ;x2=0; break;}
default :{x1=468 ;x2=12; break;}
}
USART1->BRR = x1<<4; //设置BRR波特率寄存器,低4位存放小数部分
USART1->BRR |= x2;
USART1->CR1 |= 0X00002020; //使能USART,8位数据长度,使能接收发送,开启接收中断
USART1->CR2 |= 0X00002000; //00-2个停止位,时钟极性低
USART1->CR3 |= 0X00000041; //开启DMA接收模式+错误中断使能。这样就能在错误帧出现时触发中断
USART1->CR1 |= 0X0000000C; //使能接收、发送
}
DMA1的配置如下
//DMA初始化操作
void DMA_Initial(void)
{
//配置要求:1、内存和外设数据宽度,均设置为8位宽;2,、内存地址选择自增,外设地址不递增;3、DMA优先级为高;4、通道模式为外设到内存
// 5、不开启DMA传输完成中断,6、使用DMA1的通道5---该通道对应着USART1 的 RX接收
DMA1_Channel5->CCR |=0x0000<<14; //非存储器到存储器
DMA1_Channel5->CCR |=0x0002<<12; //通道优先级为高
DMA1_Channel5->CCR |=0x00000<<10; //存储器数据宽度为8位
DMA1_Channel5->CCR |=0x0000<<8; //外设数据宽度为8位
DMA1_Channel5->CCR |=0x0001<<7; //存储器地址执行增量操作
DMA1_Channel5->CCR |=0x0000<<6; //外设地址不执行增量操作
DMA1_Channel5->CCR |=0x0000<<5; //不执行循环操作
DMA1_Channel5->CCR |=0x0000<<4; //数据传输方向为从外设读
DMA1_Channel5->CCR |=0x0001<<1; //允许传输完成中断
DMA1_Channel5->CNDTR|=513; //待传输数据的长度
DMA1_Channel5->CMAR =(u32)DMX512_data; //设置存储器地址
DMA1_Channel5->CPAR =(u32)0x40013800+0x004; //写入外设地址-USART->DR的地址,或者自己查表(0X40013800+0X04);
DMA1_Channel5->CCR |=0x01; //启动DMA
}
通过以上配置后,打开串口,人为设置RX低电平,系统会进入中断函数,且相关关键字如下
点击下一步后,相关标志位自动消失了。导致无法判断FE帧错误标志位
请问各位,是不是我配置上有问题啊,或者说有没有更好的方法来实现我的要求(能够判断FE位)。
|