1024手机基地看电影,午夜福利视频导航,国产精品福利在线一区,亚洲欧美日韩另类成人,在线观看午夜日本理论片,成年超爽免费网站,国产精品成人免费,精品动作一级毛片,成人免费观看网站,97精品伊人久久大香蕉
標題:
基于STM32F407的串口驅動程序
[打印本頁]
作者:
18395598398
時間:
2018-10-11 13:24
標題:
基于STM32F407的串口驅動程序
#include "usart1.h"//自身的頭文件
/*******************
函數名: USART1_init
函數返回值: 無
函數參數: U32 bound:設置的botelv
函數功能: 實現USART1的初始化函數
函數描述:
********************/
void USART1_init(u32 bound)
{
float USARTDIV;
u32 DIV_Mantivssa = 0;
u32 DIV_Fraction = 0;
u8 over8 = 0;
/****IO口的配置******/
RCC->AHB1ENR |= (0x1<<0);
GPIOA->MODER &= ~(0xf<<18);
GPIOA->MODER |=(0xa<<18); //選擇復用功能
GPIOA->AFR[1] &=~(0xff<<4); //清零
GPIOA->AFR[1] |=(0x77<<4); //選擇USART1 復用
/*****串口驅動配置***********/
RCC->APB2ENR |= (0x1<<4); //打開串口時鐘
USART1->CR1 |= (0x1<<13);
USART1->CR1 &= ~(0x1<<10);
USART1->CR1 &= ~(0x1<<0);
USART1->CR1 |= (0x1<<3); //打開發送器
USART1->CR1 |= (0x1<<2); //打開接收器
/*******波特率的配置********/
#ifdef OVER8 //采用8倍采樣
USART1->CR1 |= (0x1<<15);
over8 = 1;
#else //采用16倍采樣
USART1->CR1 &= ~(0x1<<15);
over8 = 0;
#endif
USARTDIV=(float)84000000/((8*(2-over8))*bound);
DIV_Mantivssa = USARTDIV;
DIV_Fraction=(USARTDIV-DIV_Mantivssa)*(8*(2-over8));
USART1->BRR = (DIV_Mantivssa<<4 | DIV_Fraction); //寫入計算好的小數波特率
}
//串口發送函數
void USART1_sendbyte(u8 data)
{
//等待數據發送完成
while((USART1->SR & (0x1<<6))==0);
//發送該次數據
USART1->DR = data;
}
//串口接收函數
u8 USART1_recbyte(void)
{
u8 data = 0;
//等待數據接收完成
while((USART1->SR & (0x1<<5))==0);
//接收該次數據
data = USART1->DR;
return data;
}
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1