初级会员

- 积分
- 94
- 金钱
- 94
- 注册时间
- 2019-3-21
- 在线时间
- 24 小时
|

楼主 |
发表于 2019-3-21 16:02:37
|
显示全部楼层
void USART1_Config(uint32_t brr)
{
float div;//分频数
uint32_t div_m;//整数部分
uint32_t div_f;//小数部分
//A端口时钟 PA9,PA10 ----Rxd,Txd
RCC->APB2ENR |= (1<<2);
RCC->APB2ENR |= (1<<14);//USART1时钟打开
//PA9 PA10配置为复用功能
GPIOA->CRH &= ~((0xf<<4)|(0xf<<8));
GPIOA->CRH |=(0xb<<4);
GPIOA->CRH |=(0x4<<8);
//配置串口 232协议:字长 + 奇偶校验使能
USART1->CR1 = 0;
//停止位 1位
USART1->CR2 &= ~(0x3<<12);
//配置全双工模式:接收发送打开
USART1->CR1 |= (0x1<<2)|(0x1<<3);
//配置波特率
div = 72000000.0/(16.0*brr);
div_m = (uint32_t)div;
div_f = (uint32_t)((div-div_m)*16);
USART1->BRR = div_m<<4|div_f;
//使能串口1
USART1->CR1 |= (1<<13);
}
void USART1_NVICConfig(void)
{
//接收中断使能
USART1->CR1 |= (1<<5);
//NVIC
NVIC_SetPriority(USART1_IRQn,1);//占先 0 次级 1
NVIC_EnableIRQ(USART1_IRQn);
}
主函数就是简单的调用
if((USART1->SR)&(1<<5))
{
printf("usart->data=%d\r\n",USART1->DR);
} |
|