新手上路
积分 46
金钱 46
注册时间 2019-7-23
在线时间 12 小时
8 金钱
在使用正点原子官方提供的usart.c时,将串口一重映射到PB6和PB7,首先是使能PORTB和串口一和复用时钟,然后将对应IO口初始化,再将串口一重映射到PB6、PB7,调用函数进行初始化之后使用printf函数在电脑上面无法接收到数据,请问是还有哪部分需要修改吗?void uart_init(u32 pclk2,u32 bound)
{
float temp;
u16 mantissa;
u16 fraction;
temp=(float)(pclk2*1000000)/(bound*16);//得到USARTDIV
mantissa=temp; //得到整数部分
fraction=(temp-mantissa)*16; //得到小数部分
mantissa<<=4;
mantissa+=fraction;
RCC->APB2ENR|=0x01;
RCC->APB2ENR|=1<<3; //使能PORTB口时钟
RCC->APB2ENR|=1<<14; //使能串口时钟
GPIOB->CRL&=0X00FFFFFF;//IO状态设置 //Pin6,Pin7
GPIOB->CRL|=0X8B000000;//IO状态设置 //需要修改
AFIO->MAPR |= 0x01<<2;
RCC->APB2RSTR|=1<<14; //复位串口1
RCC->APB2RSTR&=~(1<<14);//停止复位
//波特率设置
USART1->BRR=mantissa; // 波特率设置
USART1->CR1|=0X200C; //1位停止,无校验位.
#if EN_USART1_RX //如果使能了接收
//使能接收中断
USART1->CR1|=1<<5; //接收缓冲区非空中断使能
MY_NVIC_Init(3,3,USART1_IRQn,2);//组2,最低优先级
#endif
} 复制代码
我来回答