STM32串口 uart
波特率計(jì)算公式:波特率=Fpclkx /(16*USARTDIV)
以uart1為例說明uart1使用PA9,PA10
1、計(jì)算波特率參數(shù)
temp=(float)(pclk2*1000000)/(bound*16);//得到USARTDIV
mantissa=temp; //得到整數(shù)部分
fraction=(temp-mantissa)*16; //得到小數(shù)部分
mantissa<<=4;
mantissa+=fraction; //波特率數(shù)值
2、PA外設(shè)時鐘使能
RCC->APB2ENR|=1<<2; //使能PORTA口時鐘
3、UART時鐘使能
RCC->APB2ENR|=1<<14; //使能串口時鐘
4、IO狀態(tài)初始設(shè)置
GPIOA->CRH=0X444444B4;//IO狀態(tài)設(shè)置
5、復(fù)位串口
RCC->APB2RSTR|=1<<14; //復(fù)位串口1
RCC->APB2RSTR&=~(1<<14);//停止復(fù)位
6、波特率設(shè)置
USART1->BRR=mantissa; // 波特率設(shè)置
7、校驗(yàn)位停止位設(shè)置
USART1->CR1|=0X200C; //1位停止,無校驗(yàn)位.
8、使能接收中斷
USART1->CR1|=1<<8; //PE中斷使能
USART1->CR1|=1<<5; //接收緩沖區(qū)非空中斷使能
MY_NVIC_Init(3,3,USART1_IRQChannel,2);//組2,最低優(yōu)先級
評論