新手入门
- 积分
- 11
- 金钱
- 11
- 注册时间
- 2020-2-8
- 在线时间
- 2 小时
|
1金钱
void usart3_init(u32 pclk1,u32 bound)
{
RCC->APB2ENR|=1<<3; //使能PORTB口时钟
GPIOB->CRH&=0XFFFF00FF; //IO状态设置
GPIOB->CRH|=0X00008B00; //IO状态设置
RCC->APB1ENR|=1<<18; //使能串口时钟
RCC->APB1RSTR|=1<<18; //复位串口3
RCC->APB1RSTR&=~(1<<18);//停止复位
//波特率设置
USART3->BRR=(pclk1*1000000)/(bound);// 波特率设置
USART3->CR1|=0X200C; //1位停止,无校验位.
//使能接收中断
USART3->CR1|=1<<5; //接收缓冲区非空中断使能
MY_NVIC_Init(0,1,USART3_IRQn,2);//组2
TIM7_Int_Init(1000-1,7200-1); //100ms中断
TIM7->CR1&=~(1<<0); //关闭定时器7
USART3_RX_STA=0; //清零
}
这是教程的串口3的初始化程序,我个人不理解的是对PB3的配置,在本程序中,最后与8相与,也就是配置成了输入的上拉或者下拉,但是在datasheet中,明确要求了对于串口的输入全双工必须是浮空和上拉输入,在本程序中并没有对对PB3-ODR进行配置1,也就是最后都是下拉输入,所以个人就比较以后,查了教程中所有,都没有对ODR进行1配置,然后我查阅了库函数版本,是设置了浮空输入,那理论上寄存器版本应该是与4相与(0100),也就是程序应该改成:
GPIOB->CRH|=0X00004B00; //IO状态设置
不知道是我理解的错误,希望有人可以帮我解答
|
最佳答案
查看完整内容[请看2#楼]
两个都OK,在串口模式下,IO设置成推挽输出,或者复用输出,或者上拉/下拉输入,都是可以正常工作的,对于RX脚来说。
|