金牌会员
- 积分
- 1445
- 金钱
- 1445
- 注册时间
- 2017-10-9
- 在线时间
- 122 小时
|
发表于 2019-7-3 13:49:30
|
显示全部楼层
- //初始化IO 串口1
- //pclk2:PCLK2时钟频率(Mhz)
- //bound:波特率
- void uart_init(u32 pclk2,u32 bound)
- {
- float temp;
- u16 mantissa;
- u16 fraction;
- temp=(float)(pclk2*1000000)/(bound*16);//得到USARTDIV@OVER8=0
- mantissa=temp; //得到整数部分
- fraction=(temp-mantissa)*16; //得到小数部分@OVER8=0
- mantissa<<=4;
- mantissa+=fraction;
- RCC->AHB1ENR|=1<<0; //使能PORTA口时钟
- RCC->APB2ENR|=1<<4; //使能串口1时钟
- GPIO_Set(GPIOA,PIN9|PIN10,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_50M,GPIO_PUPD_PU);//PA9,PA10,复用功能,上拉输出
- GPIO_AF_Set(GPIOA,9,7); //PA9,AF7
- GPIO_AF_Set(GPIOA,10,7);//PA10,AF7
- //波特率设置
- USART1->BRR=mantissa; //波特率设置
- USART1->CR1&=~(1<<15); //设置OVER8=0
- USART1->CR1|=1<<3; //串口发送使能
-
- #if EN_PARITY_ODD_EVEN //使能奇偶校验
-
- USART1->CR1 |=1<<12; //1SB,1STB
- USART1->CR1 |=1<<10; //是能奇偶校验
- USART1->CR1 |=1<<9; //奇校验
-
- #endif
- #if EN_USART1_RX //如果使能了接收
- //使能接收中断
- USART1->CR1|=1<<2; //串口接收使能
- USART1->CR1|=1<<5; //接收缓冲区非空中断使能
- MY_NVIC_Init(3,3,USART1_IRQn,2);//组2,最低优先级
- #endif
- USART1->CR1|=1<<13; //串口使能
- }
复制代码
|
|