本帖最后由 cpl_1 于 2013-3-12 16:49 编辑
// AFIO->MAPR=1<<4; //重映射语句放在时钟开启前不行
// RCC->APB2ENR|=1<<0; //使能AFIO 时钟 ,以操作AFIO_MAPR寄存器
// AFIO->MAPR=1<<4; //开启USART3部分重新映射
// RCC->APB2ENR|=1<<4; //使能PORTC口时钟
// RCC->APB1ENR|=1<<18; //使能串口3时钟 ,APB1总线频率36MHz
// RCC->APB2ENR|=1<<0; //使能AFIO 时钟 ,以操作AFIO_MAPR寄存器
// RCC->APB2ENR|=1<<4; //使能PORTC口时钟
// AFIO->MAPR=1<<4; //开启USART3部分重新映射
// RCC->APB1ENR|=1<<18; //使能串口3时钟 ,APB1总线频率36MHz
RCC->APB2ENR|=1<<0; //使能AFIO 时钟 ,以操作AFIO_MAPR寄存器
RCC->APB2ENR|=1<<4; //使能PORTC口时钟
RCC->APB1ENR|=1<<18; //使能串口3时钟 ,APB1总线频率36MHz
AFIO->MAPR=1<<4; //开启USART3部分重新映射
GPIOC->CRH&=0XFFFF00FF;
GPIOC->CRH|=0X00008B00;//IO状态设置
// AFIO->MAPR=1<<4; //开启USART3部分重新映射
// RCC->APB1ENR|=1<<18; //使能串口3时钟 ,APB1总线频率36MHz OK
RCC->APB1RSTR|=1<<18; //复位串口3
RCC->APB1RSTR&=~(1<<18);//停止复位
//波特率设置
USART3->BRR=mantissa; // 波特率设置
USART3->CR1|=0X200C; //1位停止,无校验位. 使能串口
今天才发现原因,原来由于粗心,USART3重新映射时没有把UART4->DR改成USART3->DR,所以数据发送不出去。不过发现AFIO->MAPR=1<<4; 语句放在GPIOC引脚端口配置语句的前或后面都能重映射成功;也可以放在PORTC时钟开启对前面,就像上面注释掉的语句那样。不过实验时只单独针对USART3,没有加上其它的功能和同时映射多个设备。
|