下面一段串口初始化USART1能够重映像到PB6和PB7脚。我写的程序总是不行。不重映像可以。
void UART1Config(uint8 SystemClock,uint16 baudrate)
{
double Num;
uint16 Mantissa;
uint8 Fraction;
RCC->APB2RSTR |= 1 << 14;
RCC->APB2RSTR &= ~(1 << 14); //复位
RCC->APB2ENR |= 1 << 14; //UART1时钟使能
RCC->APB2ENR |= 0X01; //辅助功能时钟使能
RCC->APB2ENR |= 1 << 3; //PB口时钟开启
AFIO->MAPR |= 1 << 2; //UART1的重映射TX/PB6,RX/PB7
GPIOB->CRL &= 0X00FFFFFF;
GPIOB->CRL |= 0X8B000000; //TX为复用功能推挽输出,RX为上拉输入
GPIOB->ODR |= 1 << 7; //上拉
Num = (double)(SystemClock * 1000000) / baudrate / 16; //算出DIV_Mantissa和DIV_Fraction
Mantissa = (uint16)Num;
Fraction = (uint8)((Num - Mantissa) * 16);
USART1->BRR = ((Mantissa << 4) + Fraction);
USART1->CR1 &= ~(1 << 12); //一个起始位,8个数据位,n个停止位
USART1->CR1 |= 1 << 5; //收到数据产生中断
USART1->CR1 |= 1 << 3; //发送使能
USART1->CR1 |= 1 << 2; //接收使能
USART1->CR1 |= 1 << 13; //串口使能
NVIC_Config(3,3,USART1_IRQChannel,2);
}
看看哪里有问题啊
|