首页 > 其他分享 >STM32F407 UART

STM32F407 UART

时间:2024-08-07 19:53:42浏览次数:7  
标签:字节 UART void str STM32F407 DIV USART1 u8

//串口(UART)------------------------:
//1.同步:
        步调一致,两个设备之间的通信速度相同
//2.异步:
        步调不一致,两个设备之间的通信速度不相同

//总结:
        同步通信:有时钟线连接,并且时钟线可以控制两个设备之间的速度,让速度保持一致
        异步通信:没有时钟线连接,需要用户自行规定两个设备的数据传输速度

//单工、半双工、全双工:
        单工:  一根数据线,A与B之间单向传输
        半双工:  一根数据线,A传输给B结束后,B才能给A传输
        双工:  两根数据线,A与B之间能同时相互传递数据
        //说明:一般全双工通信都会有发送端(TX/TXD)和接收端(RX/RXD)
        //会有两根数据线负责数据传输发送要比接收先
        //UART全双工
        
//串行与并行:    数字量由0/1组成,数据一般以字节为单位,1byte=8bit
        串行:  数据一个一个发送
        并行:  多车道,多个数据同时发送
        
//UART:是一种异步全双工串行通信方式
//波特率公式:
            USARTDIV = Fck / (8*(2 - OVER8)) / 波特率;
            DIV_M = (u32)USARTDIV;
            DIV_F = (USARTDIV - DIV_M) * (8 * (2 - over8));


//USART1的初始化方法:
            /*
            函数功能:USART1初始化
            返回值:void
            形参:u32 bps(对应的波特率)
            函数说明:
            USART1_TX   ---  PA9  --- 复用模式
            USART1_RX   ---  PA10  --- 复用模式
            低位复用寄存器:GPIOA->AFR[0]
            高位复用寄存器:GPIOA->AFR[1]
            */


            {
                float USARTDIV = 0;
                u32 DIV_M,DIV_F;
    
                //打开GPIOA的时钟、Usart1的时钟
    
                //PA9、PA10初始化
                1.清零
                2.打开配置模式为复用
    
                //配置复用关系
                根据映射分别配置USART1的TX与RX(AFR)
    
                //USART1初始化
                1.SR
                2.CR1
                3.CR2
    
                //计算波特率
                USARTDIV = 84000000.0 / (8*(2 - OVER8)) / bps;
                DIV_M = (u32)USARTDIV;//强转为整型
                DIV_F = (USARTDIV - DIV_M) * (8 * (2 - OVER8));//小数部分
                USART1->BRR |= DIV_M << 4 | DIV_F;//设置BRR寄存器
    
                //使能USART1
                USART1->CR1 |= 1 << 13;//使能串口1(CR1中)
            }

//发送一字节函数:
/*
    函数功能:发送一字节数据
    返回值:void
    形参:u8 data
    函数说明:
    1.等待数据可以发送
    2.发送数据
*/
void usart1_send_byte(u8 data)
{
    while(!(USART1->SR & 1 << 7));
        
    USART1->DR = data;
}

//接收一字节函数:
/*
    函数功能:接收一字节数据
    返回值:u8
    形参:void
    函数说明:
    1.等待数据可以接收
    2.接收一字节数据
*/
u8 usart1_rec_byte(void)
{
    while(!(USART1->SR & 1 << 5));
    
    return USART1->DR;
}

//发送一字符串数据:
/*
    函数功能:发送一个字符串
    返回值:void
    形参:u8 *str
    函数说明:
    通过while循环,按字节一字节一字节发送字符串,最后在末尾补'\0'
*/
void usart1_send_str(u8 *str)
{
    while(*str != '\0')
    {
        usart1_send_byte(*str);
        str++;     //按字节偏移
    }
    
    usart1_send_byte('\0');     //字符串末尾补零
}


//接收一个字符串数据:
/*
    函数功能:接收一个字符串
    返回值:void
    形参:u8 *str
    函数说明:
    通过为while(1)一字节一字节循环接收数据,在遇到'\r'或'\n'之前结束循环,最后在末尾补0
*/
void usart1_rec_str(u8 *str)
{
    u8 a;
    
    while(1)
    {
        *str = usart1_rec_byte()
        if(*str == '\r')
        {
            break;  
        }
        str++;
    }
    
    *str = '\0';
    a = usart1_rec_byte();     //将末尾的'\n'接收到一个字符中,不然会出错
}

标签:字节,UART,void,str,STM32F407,DIV,USART1,u8
From: https://blog.csdn.net/txz2629310036/article/details/140965654

相关文章

  • STM32F407 SysTick
    //定时器分类:   内核定时器(系统滴答定时器):      延时、定时中断、给操作系统提供时基   基本定时器:      延时、定时中断、时间片   通用定时器:      延时、定时中断、输出比较(PWM)、输入捕获(捕获高/低电平时间、红外信号解码(解NEC......
  • STM32F407 GPIO
    //单片机:   是典型的嵌入式微控制器,英文MCU;是一种集成电路芯片,采用超大规模集成电路技术把FPU,RAM,ROM,I/O口中断系统,定时器计数器等功能集成到一块硅片上,构成的小而完善的计算机系统。//中央处理器(FPU)(168MHz)//随机存储器(RAM)//只读存储器(ROM)//定时器:   重要  ......
  • 串行通信协议--UART(Universal Asynchronous Receiver/Transmitter,通用异步收发传输器
    一、UART简介  UART广泛应用于微控制器和计算机之间的数据通信,如GPS模块、蓝牙模块、GSM模块等。UART是一种通用串行数据总线,用于异步通信,该总线双向通信,可以实现全双工传输和接收。在嵌入式设计中,UART用于主机与辅助设备通信UART通常被集成于其他通讯接口的连结上。UA......
  • Quart自定义文件导出名
    直接上代码fromquartimportQuart,send_fileimportioimportxlwtapp=Quart(__name__)@app.route('/download-excel',methods=["POST"])asyncdefdownload_excel():#创建一个简单的Excel文件workbook=xlwt.Workbook()sheet=workb......
  • springboot系列教程(二十二):springboot整合QuartJob,实现定时器实时管理
    一、QuartJob简介1、一句话描述Quartz是一个完全由java编写的开源作业调度框架,形式简易,功能强大。2、核心API(1)、Scheduler代表一个Quartz的独立运行容器,Scheduler将Trigger绑定到特定JobDetail,这样当Trigger触发时,对应的Job就会被调度。(2)、Trigger描......
  • Spring Boot + Spring Batch + Quartz 整合定时批量任务
     ​ 博客主页:   南来_北往系列专栏:SpringBoot实战前言最近一周,被借调到其他部门,赶一个紧急需求,需求内容如下:PC网页触发一条设备升级记录(下图),后台要定时批量设备更新。这里定时要用到Quartz,批量数据处理要用到SpringBatch,二者结合,可以完成该需求。由于之前,没有......
  • STM32F407最小系统板烧录基于ST-LINK /V2
    STM32F407最小系统板烧录ST-LINK/V2背景我们使用的单片机最小系统板为STM32F407ZGT6,下载器为正点原子.方法下载测试程序下载好程序`LoadTest`,地址为Casdos/STM32F407NUEDC:电赛,尤其针对stm32f407zet6最小开发版相关代码(github.com)按图连接SWD和其它线路,注意SW......
  • Java中的定时任务调度:Quartz详解
    Java中的定时任务调度:Quartz详解大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在现代软件开发中,定时任务调度是一项非常常见的需求。Quartz是Java平台上一个强大且灵活的任务调度库,广泛应用于企业级应用中。本文将深入探讨Quartz的基本概念、配置方法和......
  • 在.NET MVC 中使用 Quartz.NET 创建可以修改时间的定时任务,并结合 Autofac 进行依赖注
    net4.6.1  nuget包Quartz  3.0Autofac  5.0Autofac.Mvc5 5.0  步骤1:创建Quartz任务首先,创建一个实现 IJob 接口的任务类。这个类将定义你希望定时执行的操作。publicclassMyJob:IJob{publicTaskExecute(IJobExecutionContextcontext)......
  • UART协议详解:异步串行通信的原理与应用
    UART(UniversalAsynchronousReceiver/Transmitter)协议是一种用于异步串行通信的标准,允许数据在两个设备之间通过串行总线进行双向传输。UART的设计目的是将并行数据转换为串行格式,以便通过一对导线(或无线链路)进行传输,然后再在接收端将串行数据转换回并行格式。UART的关键......