标题:
基于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.51hei.com/bbs/)
Powered by Discuz! X3.1