找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3737|回复: 0
收起左侧

基于STM32F407的串口驱动程序

[复制链接]
ID:330391 发表于 2018-10-11 13:24 | 显示全部楼层 |阅读模式
#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;                               
}







回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表