原子哥 我按照你给的例子 修改成下面这样 去掉了DMA功能
//初始化IO 串口2
//pclk2 CLK2时钟频率(Mhz)
//bound:波特率
//CHECK OK
//091209
void uart_init2(u32 pclk1,u32 bound)
{
RCC->APB2ENR|=1<<2; //使能PORTA口时钟
GPIOA->CRL&=0XFFFF00FF; //IO状态设置
GPIOA->CRL|=0X00008B00; //IO状态设置
RCC->APB1ENR|=1<<17; //使能串口时钟
RCC->APB1RSTR|=1<<17; //复位串口2
RCC->APB1RSTR&=~(1<<17);//停止复位
//波特率设置
USART2->BRR=(pclk1*1000000)/(bound);// 波特率设置
USART2->CR1|=0X200C; //1位停止,无校验位.
//USART2->CR3=1<<7; //使能串口2的DMA发送
//UART_DMA_Config(DMA1_Channel7,(u32)&USART2->DR,(u32)USART2_TX_BUF);//DMA1通道7,外设为串口2,存储器为USART2_TX_BUF
//#ifdef USART2_RX_EN //如果使能了接收
//使能接收中断
USART2->CR1|= (1<<2)+(1<<3); //使能接收发送
USART2->CR1|=1<<8; //PE中断使能
USART2->CR1|=1<<5; //接收缓冲区非空中断使能
MY_NVIC_Init(2,3,USART2_IRQChannel,2);//组2,优先级2,3
//TIM4_Init(999,7199); //100ms中断
//USART2_RX_STA=0; //清零
//TIM4_Set(1); //关闭定时器4
//#endif
}
//串口2接收中断
void USART2_IRQHandler(void)
{
unsigned char res;
res=USART2->DR;
send_chars2("串口2工作正常");
}
在仿真器调试模式下 我往串口2发数据 进入不了接收中断 当我把仿真器拿掉 在往串口2发数据 发什么 串口2就返回什么 我用表测了串口2的线路 R和T没有短路的地方
|