初级会员

- 积分
- 95
- 金钱
- 95
- 注册时间
- 2011-8-10
- 在线时间
- 8 小时
|
改动UART_init如下, 不能通讯, 请原子指点! 谢谢!
void UART_Init(INT32U pclk2,INT32U rate)
{
float temp;
INT16U mantissa,fraction;
temp = (float)(pclk2 * 1000000) / (rate * 16); //得到USARTDIV
mantissa = temp; //得到整数部分
fraction = (temp - mantissa) * 16; //得到小数部分
mantissa <<= 4;
mantissa += fraction;
RCC->APB2ENR |= 1 << 2; //使能PORTA口时钟
RCC->APB1ENR |= 1 << 17; //使能串口2时钟
GPIOA->CRL = 0x44444B44; //IO状态设置
RCC->APB1RSTR |= 1 << 17; //复位串口2
RCC->APB1RSTR &= ~(1 << 17); //停止复位
//波特率设置
USART2->BRR = mantissa; //波特率设置
USART2->CR1 |= 0x200C; //1位停止,无校验位.
#ifdef EN_USART2_RX //如果使能了接收
//使能接收中断
USART2->CR1 |= 1 << 8; //PE中断使能
USART2->CR1 |= 1 << 5; //接收缓冲区非空中断使能
MY_NVIC_Init(3,2,USART2_IRQChannel,2); //组2,倒数第二优先级
#endif
}
|
|