传感网应用开发(中级) 课件全套 02 STM32微控制器基本外设应用开发-08 LoRa通信应用开发_第1页
传感网应用开发(中级) 课件全套 02 STM32微控制器基本外设应用开发-08 LoRa通信应用开发_第2页
传感网应用开发(中级) 课件全套 02 STM32微控制器基本外设应用开发-08 LoRa通信应用开发_第3页
传感网应用开发(中级) 课件全套 02 STM32微控制器基本外设应用开发-08 LoRa通信应用开发_第4页
传感网应用开发(中级) 课件全套 02 STM32微控制器基本外设应用开发-08 LoRa通信应用开发_第5页
已阅读5页,还剩806页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

“1+X”传感网应用开发(中级)STM32介绍知识链接01ARM介绍02STM32介绍什么是ARM?01ARM可以说是一个公司的名称,一类微处理的通称,也代表一种技术。其实ARM是一个做芯片标准的公司,它负责芯片内核的架构设计,不制造芯片,不向终端用户出售芯片,而把具体的实现,授权给像TI,ST等半导体公司,由合作伙伴生产出各具特色的芯片。Cortex-A系列-开放式操作系统的高性能处理器:智能手机智能本和上网本电子书阅读器数字电视家用网关Cortex-M系列-面向具有确定性的微控制器应用的成本敏感型解决方案微控制器混合信号设备智能传感器汽车电子和气囊Cortex-R系列-面向实时应用的卓越性能汽车制动系统动力传动解决方案大容量存储控制器网络和打印01常见的ARM处理器生产商及产品ARM只提供技术,芯片由对应的厂商生产01STM32是意法半导体(STMicroelectronics,简称ST)有限公司出品的一系列微控制器(MicroControllerUnit,简称MCU)的统称。STM3232是指数据总线是32位的,一次性可以传输32位的数据。02主流产品:(STM32F0、STM32F1、STM32F3)超低功耗产品:(STM32L0、STM32L1、STM32L4、STM32L4+)高性能产品:(STM32F2、STM32F4、STM32F7、STM32H7)STM32F10X系列02STM32微控制器的命名规则02STM32F103VET6含义02总的来说STM32具有如下优势:

1)极高的性能:主流的Cortex内核。

2)丰富合理的外设,合理的功耗,合理的价格。

3)强大的软件支持:丰富的软件包。

4)全面丰富的技术文档。

5)芯片型号种类多,覆盖面广。

6)强大的用户基础:最先成功试水CM3芯片的公司,积累了大批的用户群体,为其领先做铺垫。“1+X”传感网应用开发STM32开发环境的搭建与工程的建立任务要求

张明新接到项目,要求完成STM32单片机的开发工作,张明开始着手准备基于STM32单片机开发的环境搭建及工程的建立。目录14123重点与难点STM32开发环境的选择开发环境的安装配置工程的建立及运行1重点与难点重点:环境的安装

工程的建立文件的烧写难点:环境的配置

重点与难点2STM32开发环境的选择开发环境选择02库开发01寄存器开发标准外设库(STD库)HAL库LL库

三种1STM32软件开发的各种模式优点缺点STM32CubeMX+MDK-ARMIDE的选择3开发环境的安装配置工程的建立及运行安装过程在视频中点亮LED灯“1+X”传感网应用开发

点亮LED灯一二三26

ContentsPage目录页LED灯概述点亮LED灯开发流程演示发光二极管简称为LED什么是LED灯点亮LED灯3(1)点亮一个LED灯i3.3V任务要求点亮LED2知识链接01GPIO口介绍02GPIO口配置03

GPIO编程流程分析开发流程演示GPIO介绍GPIO(GeneralPurposeInputOutput)通用输入输出01GPIO最简单的功能是输出高低电平,GPIO还可以被设置为输入功能,用于读取按键等输入信号。GPIO工作模式01GPIO配置推挽输出可以简化理解为左侧,无论是比较器的结果如何,上下两个三极管一定有一个导通,所以可以输出强高低电平,且有一定电流,可以直接驱动数字器件。而右侧的开漏输出可以简化理解为三极管的集电极,只能输出强低电平,如果输出高电平需要外接上拉电阻。02GPIO配置

GPIO配置相关的函数API主要位于“stm32f1xx_hal_gpio.c”和“stm32f1xx_hal_gpio.h”文件中。02GPIO编程流程分析031、使能GPIO端口时钟2、初始化GPIO引脚,即为GPIO初始化结构体成员赋值,并调用HAL_GPIO_Init函数完成初始化配置3、根据项目要求控制引脚输出高低电平01建立工程存放的文件夹新建STM32CubeMX工程0203选择MCU型号配置调试端口0405配置MCU时钟树06配置LED灯相关的GPIO功能07保存STM32CubeMX工程08生成初始C代码工程09在main.c中添加逻辑代码完成功能04开发流程演示10编译下载思考题

如何实现流水灯每隔2s闪烁一次呢??如何用定时器实现LED灯每隔2s闪烁一次呢?“1+X”传感网应用开发呼吸灯应用开发01回顾02任务要求03重要知识目录CONTENTS04呼吸灯编程流程分析05项目演示回顾01建立工程存放的文件夹新建STM32CubeMX工程0203配置GPIO功能配置调试端口0405配置MCU时钟树06保存STM32CubeMX工程07生成C代码初始工程011

任务要求本任务要求设计一个可通过按键进行控制的呼吸灯系统,具体要求如下:LED灯的显示效果为“逐渐变亮”然后“逐渐变暗”;0202任务分析*LED亮度等级表*/uint8_tindexWave[]={1,1,2,2,3,4,6,8,10,14,19,25,33,44,59,80,107,143,191,255,255,191,143,107,80,59,44,33,25,19,14,10,8,6,4,3,2,2,1,1};02上升沿、下降沿与高低电平触发STM32F1系列支持将所有GPIO设置为中断输入。外部IO可由上升沿、下降沿、高低电平的三种方式触发。可选择中断或事件触发。02效果分析03呼吸灯编程流程分析1、使能GPIO端口时钟;2、初始化GPIO引脚,即为GPIO初始化结构体成员赋值,并调用HAL_GPIO_Init函数完成初始化配置;3、根据项目要求控制引脚输出有亮度等级的高低电平4、利用delay函数实现

重要知识02Delay函数03开发流程演示01GPIO口配置03GPIO介绍GPIO(GeneralPurposeInputOutput)通用输入输出,是STM32的一种外设,与大部分芯片引脚直接挂钩,STM32F103VET6芯片总共有5个GPIO外设,定义为GPIOA、GPIOB、GPIOC、GPIOD和GPIOE,每个GPIO外设有16个引脚,定义为PA0..PA15、PB0..PB15等。GPIO最简单的功能是输出高低电平,GPIO还可以被设置为输入功能,用于读取按键等输入信号。很多高级外设也有功能引脚,并且是与GPIO共用的,具体引脚功能可以通过软件编程设置对应的寄存器内容实现。GPIO配置

GPIO配置相关的函数API主要位于“stm32f1xx_hal_gpio.c”和“stm32f1xx_hal_gpio.h”文件中。GPIO工作模式GPIO编程流程分析1、使能GPIO端口时钟;2、初始化GPIO引脚,即为GPIO初始化结构体成员赋值,并调用HAL_GPIO_Init函数完成初始化配置;3、根据项目要求控制引脚输出高低电平Delay函数单片机编程过程中经常用到延时函数,最常用的莫过于微秒级延时delay_us()和毫秒级delay_ms()。1.普通延时法2.SysTick定时器延时:a).中断方式如下,定义延时时间time_delay,SysTick_Config()定义中断时间段,在中断中递减time_delay,从而实现延时。b).非中断方式呼吸灯编程流程分析1、使能GPIO端口时钟;2、初始化GPIO引脚,即为GPIO初始化结构体成员赋值,并调用HAL_GPIO_Init函数完成初始化配置;3、根据项目要求控制引脚输出有亮度等级的高低电平04项目演示05小结重点掌握:1、GPIO的配置2、如何使用Delay函数预习及思考题1、什么是定时器?2、什么是脉冲宽度调制(PulseWidthModulation,PWM)?3、如何使用意思是两种方式实现呼吸灯?“1+X”传感网应用开发按键控制LED灯01引言02按键原理03按键操作目录CONTENTS04按键消抖05按键控制LED灯代码分析06致谢一、引言1、在我们的日常生活中,使用按键控制电器开关的情况还是非常多的,比如说按键控制LED灯的亮灭,按键控制继电器的吸合,按键控制电机的正反转等操作;2、同样按键在STM32开发也非常的重要,比如说按下KEY1,使LED点亮,再按下KEY1,LED熄灭;3、按键的种类有很多,然而今天我们要研究的是贴片按键的使用,我们今天的实例为:通过KEY1的状态来控制LED的点亮与熄灭。二、按键原理1下图为按键连接原理,(PC13_KEY1为单片机IO口),其按键输出端采用上拉电阻,目的是当按键断开时,使单片机输入端口处于高电平状态,只有当按键按下时才处于低电平。21、按键的基本原理是设置单片机IO口为输入状态(如方向寄存器,”1”为输出,“0”为输入);2、默认IO状态为高电平1,按下时按键与GND短接,所以其为低电平0状态,那么我们就可以通过读取按键的IO电平状态来判断按键是否按下了;3、单片机一直检测按键端口IO的状态,当端口为低电平时(即按键按下),实行相应的动作来控制LED灯。三、按键操作1、我们把按键操作分为两个不同的版本:一个为有锁存,另外一个为无锁存。2、什么是有锁存?比如我们按下按键以后,LED常亮,但是我们想要再次关闭LED灯,那么就再次按一下按键,我们按下第一次按键以后,无论等待多长时间,直到再次按下按键以后才能关闭LED,这种情况我们称为是有锁存,3、那么什么是无锁存呢?我们按下按键,LED点亮,松开按键,LED熄灭,这种情况就叫无锁存。4、锁存有还是没有并没有孰是孰非,在不同的场合使用不同的程序才是最机智的选择。1四、按键消抖1、按键原理就是这么回事,但是正真实现时,按键会有抖动,要进行按键去抖。2、我们引入了延时消抖的思想,因为按键是机械开关,所以在按下的时候会产生电平的抖动,这在STM32单片机中经常使用。1按键实行一个动作过程是需要一定时间的,一般为100mS-1S左右,而一个单片机执行一个机器周期的时间很短,时钟为10MHZ的周期为0.1μs,这样按键每一次动作程序就会多次检测按键,出现误判(一次按下,多次动作)。按键触点在闭合或者断开的瞬间会出现抖动,抖动时间一般小于10ms。2这里我们使用软件去抖的方法,即:延时处理。按键抖动的时间间隔也就10ms以内,可以通过软件进行延时判断,过滤掉抖动的时间,达到消除抖动的目的。五、按键控制LED灯代码分析首先我们在led.h中对LED初始定义:1初始化LED灯接下来对LED做初始化函数说明:2LED初始化函数接下来是按键宏定义:3按键宏定义然后是初始化按键:4初始化按键如果使用无锁存,要通过读取IO端口的电平来判断按键是否按下:5按键无锁存举例通过原理图可知,按键按下的时候MCU读取到的应该是低电平,那么在前面加一个取反的符号,于是按下的时候读取到的电平为0,取反以后得到的为1,于是if条件成立。那么接着就会执行函数括号里面的内容,GPIO置位函数就会将其位设为1,于是LED接收到高电平,LED被点亮。如果函数条件不成立,那么就不会执行函数里面的内容。这种代码就是无锁存的情况。接下来我们再来看看有锁存的情况:6按键有锁存举例第一步先检查按键是否按下,如果按下了,那么就延时20毫秒,再次判断按键是否按下,确保其不是因为机械抖动造成的误判断。两次判断以后,其结果基本确定,如果按键按下了,就点亮LED灯,然后再加入一个死循环,等待按键被松开。就是通过一个等待按键松开的函数来跳出循环,达到按键锁存的目的。“1+X”传感网应用开发外部中断原理与分析01中断原理02外部中断/事件线路映射03中断嵌套目录CONTENTS04USART串口中断05ADC数据转换中断06定时器中断01中断原理中断是指一个突发事件,中止了CPU当前的工作,转而先去处理突发事件,处理完成后再回到当前的工作继续执行。STM32允许多种多样的中断,我们在中级学习中用到的外部中断主要有外部IO、ADC、USART等。外部中断都是异步的。02外部中断/事件线路映射(按键呼吸控制灯为例)外部按键中断GPIO引脚中断标志位中断处理函数PA0-PG0EXTI0EXTI0_IRQHandlerPA1-PG1EXTI1EXTI1_IRQHandlerPA2-PG2EXTI2EXTI2_IRQHandlerPA3-PG3EXTI3EXTI3_IRQHandlerPA4-PG4EXTI4EXTI4_IRQHandlerPA5-PG5…….PA9-PG9EXTI5……EXTI9EXTI9_5_IRQHandlerPA10-PG10…….PC13…….PA15-PG15EXTI10……EXTI13…….EXTI15EXTI15_10_IRQHandler按键KEY1按下,控制灯亮灭外部IO口的输入中断Cortex-m3支持256个中断,其中包含了16个内核中断,240个外部中断。STM32只有84个中断,包括16个内核中断和68个可屏蔽中断,STM32f103上只有60个可屏蔽中断。中断嵌套是指在进入一个中断处理程序之后,还能在中断之内再次产生中断。03中断嵌套抢占优先级响应优先级抢占优先级与响应优先级抢占优先级响应优先级中断A00哪个先发生就先执行哪个不能嵌套,必须前一个中断结束再进入下一个中断B00中断A01两个中断同时发生时,中断A先执行若中断B先发生,中断A不能打断,不能嵌套中断B00中断A10中断A可打断中断B中断A可在中断B内嵌套中断B00组SCB_AIRCRbit[10:8]NVIC_IPRx寄存器bit[7:4]

描述抢占优先级响应优先级01110:40位:04位:0-1511101:31位:0-13位:0-721012:22位:0-32位:0-331003:13位:0-71位:0-140114:04位:0-150位:0优先级分组由系统控制基本寄存器组(SCB)中的应用程序中断和复位控制器(AIRCR)决定五个组,其中抢占优先级和响应优先级的位是由NVIC_IPR寄存器决定。04USART串口中断串行通信控制LED灯通用同步异步收发器USART是MCU的重要外设,在程序设计的调试阶段,可将开发板与PC机通过串行通信接口相连,把调试信息打印到串口调试助手等工具。STM32F1中有3个USART和2个UART(无同步通信功能)引脚名称APB2(最高72MHz)APB1(最高36MHz)USART1USART2USART3UART4UART5TXPA9/PB6PA2/PD5PB10/PD8/PC10PA0/PC10PC12RXPA10/PB7PA3/PD7PB11/PD9/PC11PA1/PC11PD2sCLKPA8PA4/PD7PB12/PD10/PC12-nCTSPA11PA0/PD3PB13/PD11-nRTSPA12PA1/PD4PB14/PD12-04USART串口中断控制串行通信控制LED灯中断事件事件标志使能控制位发送期间发送完成TCTEIE清除以发送CTSCTSIE发送数据寄存器为空TXETXEIE接收期间接收数据寄存器不为空(准备好读取接收到的数据)RXNERXNEIE检测到上溢错误ORE检测到空闲线路IDLEIDLEIE奇偶校验错误PEPEIE串口输入不同指令(mode1,mode2,stop)控制流水灯正转、反转、停止05ADC数据转换中断电池电量监测模数转换器ADC可将连续变化的模拟信号转换为离散的数字信号的器件,可将温度、压力、声音或图像等转换成更易存储、处理和发射的数字信号。MCUSTM32F103VET6有3个ADC,可工作在独立、双重或三重模式下。每个ADC都有18个复用通道,可测量:16个外部信号源2个内部信号源转换精度可配置为12bit、10bit、8bit、6bit分为两个通道:规则通道——正常运行的程序注入通道——相当于中断,可以打断规则通道的转换支持多种外部事件触发方式:定时器触发、外部GPIO中断等05ADC数据转换中断电池电量监测将采集到的电池电压通过串口发送到上位机显示独立工作模式规则注入:因此不用书写中断程序激活轮询模式ADC等待转换结束接收ADC数据06定时器中断按键控制呼吸灯按键实现LED灯逐渐变亮逐渐变暗脉冲宽度调制(PWM)采用调整脉冲占空比的方式达到调整电压与电流的效果。“1+X”传感网应用开发按键控制LED灯01任务要求02任务分析03任务实施目录CONTENTS按键控制LED灯任务要求本任务要求在M3主控模块上实现按键控制LED灯亮灭的系统,具体要求如下:3使用外部中断实现按键功能;系统刚上电时,LED灯为关闭状态;奇数次按下按键,LED灯处于闪烁状态,偶数次按下,LED灯关闭;任务分析3中断概念、外部中断I/O口输出工作模式01图形化编程02完善代码03下载调试任务实施任务实施图形化编程一、图形化编程-基本配置二、图形化编程-GPIO配置任务实施图形化编程二、图形化编程-GPIO配置任务实施图形化编程二、图形化编程-NVIC配置任务实施图形化编程任务实施完善工程代码3任务实施编译下载3选取一个“M3主控模块”、连接仿真器。编译程序、下载至模块中。观察结果、调试。STM32的USART与UAART中断“1+X”传感网应用开发01项目场景概述02任务分析(知识点)03任务实施(流程)目录CONTENTS04任务总结项目场景概述

本任务要求设计一个LED灯控制系统,该系统与上位机之间通过串行通信接口相连。上位机可发送命令对LED进行控制,具体要求如下:系统中有8个LED灯,分别是LED1~LED8。系统上电时,8个LED灯默认为熄灭状态。系统运行时,8个LED灯依次点亮后全灭。LED控制指令LED工作状态LED_ALL_OFFLED1~LED8全灭LED_ALL_ONLED1~LED8全亮LED_ALL_SPANLED1~LED8同时交替闪烁LED_HALF_SPANLED1~LED8间隔交替闪烁任务分析——技术路线

上位机以串行通信的方式发送命令至该系统进行LED工作模式的切换。

串行线PC串口发送指令M3模块演示效果任务分析——程序流程2、中断如可设置?3、如可判定数据是否接受完成?1、了解STM32的USART?任务分析——知识点USART(UniversalSynchronousAsynchronousReceiverTransmitter)通用同步异步收发接口异步通信全双工任务分析——知识点

STM32F103VET6芯片USART/UART的外部引脚分布引脚名称APB2(最高72MHz)APB1(最高36MHz)USART1USART2USART3UART4UART5TXPA9/PB6PA2/PD5PB10/PD8/PC10PA0/PC10PC12RXPA10/PB7PA3/PD6PB11/PD9/PC11PA1/PC11PD2sCLKPA8PA4/PD7PB12/PD10/PC12--nCTSPA11PA0/PD3PB13/PD11--nRTSPA12PA1/PD4PB14/PD12--任务分析——知识点STM32F1的USART支持的中断事件中断事件事件标志使能控制位发送期间发送完成TCTEIE清除已发送(CTS标志)CTSCTSIE发送数据寄存器为空TXETXEIE接收期间接收数据寄存器不为空(准备好读取接收到的数据)RXNERXNEIE检测到上溢错误ORE检测到空闲线路IDLEIDLEIE奇偶校验错误PEPEIE任务实施——知识点

中断使能设置任务实施——知识点

中断处理流程任务总结——难点

难点:USART的中断标志有哪些,分别起什么作用。(不易理解)

解决方案:参考示例代码,辅助理解多练习,掌握不同中断的作用“1+X”传感网应用开发(中级)STM32串口发送数据01USART概述02STM32F1的USART03HAL库串口发送数据函数目录CONTENTS学习目标1、熟悉STM32串口发送数据的功能和应用。2、会使用串口函数库驱动STM32串口发送数据。一、USART概述USART的中文名称为:通用同步异步收发器。

英文全称是UniversalSynchronousAsynchronousReceiverandTransmitter。USART是MCU的重要外设,在程序设计的调试阶段可发挥重要作用。如:将开发板与PC机通过串行通信接口相连后,可将调试信息“打印”到串口调试助手等工具中,开发者可借助这些信息了解程序运行情况。一、USART概述UART异步通信方式特点:全双工异步通信。分数波特率发生器系统,提供精确的波特率。

发送和接受共用的可编程波特率,最高可达4.5Mbits/s可编程的数据字长度(8位或者9位);可配置的停止位(支持1或者2位停止位);可配置的使用DMA多缓冲器通信。单独的发送器和接收器使能位。检测标志:①

接受缓冲器②发送缓冲器空③传输结束标志多个带标志的中断源。触发中断。其他:校验控制,四个错误检测标志。一、USART概述任何USART双向通信至少需要两个脚:TXD和RXDRXD:数据输入引脚。数据接受。TXD:数据发送引脚。数据发送。当我们需要发送数据时,MCU内核将待发送的数据写入输出数据发送缓冲器后,串行口会自动地按照软件设定的格式将待发送的数据组成数据帧,发送控制器将适时地自动把数据从数据寄存器加载到串行输出移位寄存器,然后通过引脚TXD,把数据一位一位地发送出去。一、USART概述二、STM32F1的USARTSTM32的串口资源相当丰富的,功能也相当强劲。STM32F1系列微控制器有5个收发器外设(俗称“串口”)可用于串行通信,包括3个USART和2个UART(通用异步收发器,UniversalAsynchronousReceiverandTransmitter),它们分别是:USART1、USART2、USART3、UART4、UART5。UART与USART相比,裁剪了同步通信的功能,只有异步通信功能。同步通信与异步通信的区别在于通信中是否需要发送器输出同步时钟信号USART_CK,实际应用中一般使用异步通信。二、STM32F1的USART左图为STM32的USART功能框图USART又专门控制发送的发送器、控制接收的接收器,还有唤醒单元、中断控制等。发送器可发送8位或9位的数据字,具体取决于USART_CR[M]的状态。发送使能位USART_CR[TE]置1时,CPU或DMA从内存读取数据,数据放到TDR,然后再发送给移位寄存器,再一位一位通过TX引脚输出。二、STM32F1的USARTSTM32的发送的一个数据帧(也称为字符帧)发送需要三个部分:起始位+数据位+停止位。起始位是一个位周期的低电平,位周期就是每一位占用的时间;数据位就是要发送的8位或9位数据;停止位是一定时间周期的高电平。三、HAL库串口数据发送函数STM32的发送步骤如下:通过向USART_CR1的UE位写1来使能USART。对USART_CR1的M位进行编程以定义发送字长。对USART_CR2的停止位数量进行编程配置。如果要进行多缓冲区通信,将USART_CR3的DMAT位置1,以使能DMA,并且按照多缓冲区通信中的说明配置DMA的寄存器。使用USART_BRR选择所需的波特率。将USART_CR1的TE位置1,以便再首次发送时发送一个空闲帧。三、HAL库串口数据发送函数三、HAL库串口数据发送函数CubeMX图形界面简单配置完成了串口初始化代码三、HAL库串口数据发送函数搭配STMcubeMx工具HAL库中相关的串口发送/接收函数三、HAL库串口数据发送函数三、HAL库串口数据发送函数三、HAL库串口数据发送函数使用串口1发送数据发送字符为ch发送字符字长为1字节timeout的时间是最大值0xffff三、HAL库串口数据发送函数C语言中printf函数默认输出设备是显示器,若要实现在串口或LCD上显示,则需要重新定义函数。例如,要printf输出到串口,通过串口助手来测试代码的正确与否,则需要将输出的函数fputc里面的输出指向串口,这一过程称为重定向,写好fputc这个函数后就可以在其他.c文件中使用printf()函数将数据打印到串口调试助手了。“1+X”传感网应用开发

USART数据接收USART:通用同步/异步收发器——串口全双工异步通信可编程数据字长度8位/9位分数波特率发生器系统,最高达4.5Mbits/sLIN通信(局域互联网)STM32F1系列各个收发器外设的工作时钟来源于不同的APB总线:USART1挂载在APB2总线上,最大频率为72MHz;其他4个收发器则挂载在APB1总线上,最大频率为36MHz。检测标志校验控制四个错误检测标志10个带标志的中断源概念主要特性外设时钟来源标志USART概述USART引脚及结构USART结构USART引脚数据格式数据格式应与发送器配置的相同一个数据帧包括:1个起始位(低电平)8个数据位1个校验位1个停止位(高电平表示结束)数据接收过程开始通信,信号线为空闲,当检测到由1到0的跳变时,开始对接收时钟计数;接收端检测到起始位后,隔16个接收时钟对输入信号检测一次,把对应的值作为D0位数据;

再隔16个接收时钟,对输入信号检测一次,把对应的值作为D1位数据,直到全部数据位都输入;

接收到规定的数据位个数和校验位之后,通信接口电路希望收到停止位(逻辑1),若此时未收到逻辑1,说明出现了错误,在状态寄存器中置“帧错误”标志;若没有错误,对全部数据位进行奇偶校验,无校验错时,把数据位从移位寄存器中取出送至数据输入寄存器,若校验错,在状态寄存器中置“奇偶错”标志;

本帧信息全部接收完,把线路上出现的高电平置为空闲位;USART接收器特征描述

本任务要求设计一个LED流水灯系统,该系统与上位机之间通过串行通信接口相连。上位机可发送命令对LED流水灯系统进行控制,具体要求如下:系统中有8个LED灯,分别是LED1~LED8。系统上电时,8个LED灯默认为熄灭状态。系统运行时,8个LED灯依次点亮。LED流水灯的工作模式有两种:模式一:8个LED灯依次点亮,每个LED灯点亮1秒后熄灭,然后切换为另一个,点亮顺序为LED0、LED1、……、LED7,并以此循环往复;模式二:8个LED灯依次点亮,每个LED灯点亮1秒后熄灭,然后切换为另一个,点亮顺序为LED7、LED6、……、LED0,并以此循环往复。上位机以串行通信的方式发送命令至该系统进行LED流水灯工作模式的切换,命令“mode_1#”和“mode_2#”分别对应模式一和模式二的控制,命令“stop#”控制LED流水灯停止运行并全灭。案例任务:串行通信控制LED灯应用开发新建工程建立工程存放的文件夹新建STM32CubeMX工程010203选择MCU型号04开始工程配置调试端口01PA13SWDIOPA14SWCLK配置LED的GPIO功能03LED0~LED7PE7~PE0配置MCU时钟树02HCLK72MHzPCLK136MHzPCLK172MHz配置USART外设工作参数04模式:异步波特率:115200Bits/s数据方向:接收与发送优先级:0配置保存STM32CubeMX工程生成初始代码工程完善代码01将USART发送函数重定向到print()函数02定义USART收发所需的变量03编写USART接收中断服务函数04编写LED流水灯显示程序05编写main()函数完善代码1xxx2xxx3xxx4xxx串口调试助手输入模式命令模式1LED8—LED1依次点亮点亮时间:1s模式1LED1—LED8依次点亮点亮时间:1sStop模式LED停止运行并全灭系统运行结果谢谢!“1+X”传感网应用开发ADC原理与驱动1什么是ADC什么是ADC?中文名:模/数转换器。*是指将连续变化的模拟信号转换为离散的数字信号的器件。*ADC在多个领域有着广泛的应用,利用各种传感器,能将现实世界中的模拟量转换为机器能够识别的数字量,机器有了ADC,就像人有了各种感官,能够感知周围的世界并做出反应。模拟信号ADC数字信号

A/D转换器的主要类型01逐次比较型(STM32)02并行比较型03积分型04电容阵列逐次比较型05压频变换型06

调制型(

西格玛,

德尔塔)优点缺点速度较高、功耗低低精度价格便宜高精度价格贵转换速率极高电路规模极大价格高高分辨率转换速率极低成本低、精度高制作工艺复杂分辩率高、功耗低、价格低需要外部计数电路支持高分辨率转换速率低

A/D转换器的主要技术指标01转换范围02分辨率03绝对精度04转换时间A/D转换器能够转换的模拟电压范围。(范围)A/D转换器的分辨率用输出二进制数的位数表示,位数越多,分辨率越高。(精度)绝对精度是指对应一个给定数字量的理论模拟输入与实际输入之差。(误差)转换速度是指A/D转换器完成一次转换所需的时间。(时间)2STM32中的AD转换模块STM32中的AD模块STM32拥有1~3个ADC:

*STM32F101/102系列只有1个ADC

*STM32F103系列最少都拥有2个ADC(STM32F103VET6有3个ADC)*这些ADC可以独立使用,也可以使用双重模

式(提高采样率)。STM32的ADC是:

*12位逐次比较型的模拟数字转换器。

*它有18个通道,可测量16个外部和2个内部信号源

(温度传感器、内部参考电压)。STM32中AD模块基本结构原理知识点(3-转换顺序):多路轮询转换可设置为注入通道或规则通道。在规则通道轮询的过程中,可以插入注入通道的转换。(可触发AD转换标志位)(外部电压输入引脚)(时钟信号)(存放转换数据)(产生中断信号)(注入通道规则通道)ADC的输入通道通道号ADC1ADC2ADC3外部通道0PA0PA0PA0外部通道1PA1PA1PA1外部通道2PA2PA2PA2外部通道3PA3PA3PA3外部通道4PA4PA4PF6外部通道5PA5PA5PF7外部通道6PA6PA6PF8外部通道7PA7PA7PF9外部通道8PB0PB0PF10外部通道9PB1PB1PF3外部通道10PC0PC0PC0外部通道11PC1PC1PC1外部通道12PC2PC2PC2外部通道13PC3PC3PC3外部通道14PC4PC4PF4外部通道15PC5PC5PF5通道16(内部)内部VSS内部VSS内部VSS通道17(内部)内部参考电压VREFINT内部VSS内部VSS单个ADC的输入通道多达18个,其中包括16个外部通道和2个内部通道,16个外部通道分别连接着不同的GPIO口

ADC输入电压范围的确定如上图的标号①处所示,ADC的输入电压VIN的范围是:VREF-≤VIN≤VREF+,由图中的VREF-、VREF+、VDDA和VSSA四个外部引脚的电压决定。引脚名称信号类型功能说明VREF+正模拟参考电压输入ADC高(正参考)电压:1.8V≤VREF+

≤VDDAVDDA模拟电源输入模拟电源电压等于VDD全速运行时:2.4V≤VDDA

≤VDD(3.6V)

低速运行时:1.8V≤VDDA

≤VDD(3.6V)VREF-负模拟参考电压输入ADC低(负参考)电压,VREF-=VSSAVSSA模拟电源接地输入该引脚一般接地,电压等于VSS当没有外接电路时,最大允许电压值为3.6V若输入电压值大于3.6V,则必须电压输入通道设计分压电路根据基尔霍夫定律,节点流入的电流等于流出的电流:

由上式可以得出:如果此时ADC测的的Vout为3v,则实际的电压是ADC

的中断控制ADC转换结束后,支持产生四种中断:DMA溢出中断、规则转换结束中断、注入转换结束中断和模拟看门狗事件中断。01DMA溢出中断02规则转换结束中断03注入转换结束中断04模拟看门狗中断DMA溢出中断可以把转换好的数据直接转存至内存中,而不是先存在转换寄存器在发往内存。(提高效率,尤其适用于多路、多模式转换)

规则转换中断可以把转换好的数据放在规则转换寄存器里,之后等待系统空闲时上报。

注入转换中断可以把转换好的数据放在注入转换寄存器里,之后等待系统空闲时上报,优先级比规则转换高。用户可以通过程序设定电压触发上限、下限,当电压值高于上限或者低于下限时,触发看门狗中断。3STM32中ADC的基本参数(以下参数在CubeMX中会进行设置)(1)ADC的工作模式ADC中每个通道的A/D转换可以按照:

(1)

单通道(一个IO口输入)、(2)多通道(多个IO扫描输入)、(3)多通道+间断,三种模式结合单次转换、连续转换,共计6种方式执行。(2)ADC转换结果的存储方式

ADC的转换结果可以左对齐或右对齐方式存储在16位数据寄存器中:右对齐左对齐(3)AD通道的转换时间

每个通道总的转换时间=采样时间

+转换时间(1)采样时间:通过设置CubeMX,软件自动设置采样时间寄存器的值(3)AD通道的转换时间

每个通道总的转换时间=采样时间

+转换时间(2)转换时间:AD转换时间(12.5个周期)STM32的ADC最大的转换速率为1Mhz,也就是转换时间为1us(在ADCCLK=14M,采样周期为1.5个ADC时钟下得到),不要让ADC的时钟超过14M,否则将导致结果准确度下降。(4)AD时钟信号的获取ADCCLK(ADC时钟信号,决定转换时间)4

测试案例测试案例要求(1)ADC工作模式设置为独立模式(2)使用PA1引脚作为ADC1的输入端口(3)数据对齐方式为右对齐(4)使用使能规则转换,触发方式设置为软件触发

(调用转换函数启动转换,值存放在规则通道)(5)转换次数设置为1,通道号设置为1通道(6)禁用多路扫描、禁用连续转换、禁用非连续转换(7)采样时间设置为71.5个周期CubeMX设置CubeMX软件设置核心代码(1)ADC1初始化代码(2)ADC1应用代码核心代码就三句:

(1)开启转换(2)等待转换(3)取转换值

使用HAL库函数实现,需要熟记“1+X”传感网应用开发STM32

ADC数据采集HAL_ADC_Start(&hadc1); HAL_ADC_PollForConversion(&hadc1,100); adc_value=HAL_ADC_GetValue(&hadc1); voltage=(float)adc_value/4096*3.3; sprintf(voltString,"采集到的电压值为:%.2fV",voltage); printf("%s\r\n",voltString); HAL_Delay(1000);“1+X”传感网应用开发定时器切换LED灯01项目场景概述02任务分析03任务实施目录CONTENTS04任务总结1项目场景概述本项目要求使用STM32定时器设计一个切换LED流水灯系统,具体要求如下:(1)系统中有8个LED灯,分别是LED1~LED8。系统上电时,8个LED灯默认为熄灭状态。(2)通过STM32定时器使8个LED灯依次点亮,实现LED1点亮1秒后熄灭,然后LED2点亮1秒后熄灭……最后LED8点亮1秒后熄灭,并以此循环往复。2任务分析——流程分析GPIO工作模式开始LED灯配置定时器配置定时器中断LED灯控制哪些GPIO口可配置LED灯功能?STM32定时器有哪些?区别?如何将定时器配置为1秒?如何配置定时器中断处理函数?如何编写LED灯轮流切换程序?2任务分析——知识点GPIO配置(LED配置):STM32F103VET6芯片共有5个GPIO外设:GPIOA、GPIOB、GPIOC、GPIOD和GPIOE每个GPIO外设有16个引脚定义为PA0..PA15、PB0..PB15PE0~PE7可定义为LED灯功能引脚GPIO工作模式2

STM32F103VE型号MCU共有8个定时器,编号为TIM1~TIM8,其中包括2个高级控制定时器、4个通用定时器和2个基本定时器。定时器类型定时器编号计数器位数计数器类型捕获/比较通道数挂载总线/接口时钟定时器时钟高级控制定时器TIM1、TIM816位递增、递减、递增/递减4APB2/72MHz72MHz通用定时器TIM2、TIM3TIM4、TIM516位递增、递减、递增/递减4APB1/36MHz72MHz基本定时器TIM6、TIM716位递增无APB1/36MHz72MHz任务分析——知识点定时器:2任务分析——知识点定时器:基本定时器(TIM6)用于独立时间计时功能,当定时时间到时,产生“定时器中断”2任务分析——知识点定时器:定时器中断间隔配置(难点):T(单位秒)=((重装载值arr+1)*(预分频系数psc+1))/系统时钟频率LED流水灯每隔1秒钟切换一次显示效果,使能TIM6的更新中断,并将时间间隔配置为1秒钟。(1)系统时钟频率为72M

72000000(2)预分频系数psc设置

7199

(3)重装载值arr设置

99991秒=((9999+1)*(7199+1))/720000003任务实施——关键步骤GPIO(LED灯)配置1、初始化GPIO引脚,GPIO初始化结构体成员赋值,并调用HAL_GPIO_Init函数完成初始化配置;2、根据项目要求控制引脚输出高低电平01GPIO配置相关的函数API主要位于“stm32f1xx_hal_gpio.c”和“stm32f1xx_hal_gpio.h”文件中3任务实施——关键步骤配置定时器(参数)1、定时器初始化(MX_TIM6_Init函数)2、配置预分频系数、重装载值023任务实施——关键步骤配置定时器(中断)1、启动TIM6中断HAL_TIM_Base_Start_IT(&htim6)2、添加中断回调函数(HAL_TIM_PeriodElapsedCallback)3、编写控制LED灯程序033任务实施——关键步骤完成主程序1、添加自定义变量和函数定义2、编写main()函数的主循环程序3、编译程序并下载M3模块运行044任务总结GPIO配置(LED灯配置):PE0~PE7定义为LED灯功能引脚GPIO工作模式定时器:定时器分类和功能定时器中断配置(难点)

T(单位秒)=((重装载值arr+1)*(预分频系数psc+1))/系统时钟频率

“1+X”传感网应用开发STM32基础开发任务3:按键控制呼吸灯应用开发0任务要求本任务要求设计一个可通过按键进行控制的呼吸灯系统,具体要求如下:使用外部中断实现按键功能;LED灯的显示效果为“逐渐变亮”然后“逐渐变暗”;系统刚上电时,LED灯为关闭状态。第奇数次按下按键,LED灯显示呼吸灯效果;第偶数次按下按键,LED灯关闭,并以此循环往复。知识链接如何选择呼吸灯的定时器0304开发流程演示02PWM01设计思路在传统的模拟控制灯亮度调整中,可以采用一个可变电阻。调整电阻值变大或变小;流经这个电阻的电流也随之增加或减少,从而改变了LED的电流值,使灯泡的亮度相应变大或变小。01设计思路想一想,在中学物理课程中,调整灯泡的亮度,咱们怎么实现?尽管模拟控制看起来可能直观而简单,但它并不总是非常经济或可行的。(不适用我们STM32开发) 1.模拟电路容易随时间漂移,因而难以调节。能够解决这个问题的精密模拟电路可能非常庞大、笨重(如老式的家庭立体声设备)和昂贵。 2.模拟电路还有可能严重发热,其功耗相对于工作元件两端电压与电流的乘积成正比。 3.模拟电路还可能对噪声很敏感,任何扰动或噪声都肯定会改变电流值的大小。 在STM32的开发中,我们怎么办?作答正常使用主观题需2.0以上版本雨课堂主观题10分LED的发光强度基本上正比于通过LED器件的电流,这说明脉冲电流的平均电流与直流电流相同的条件下,LED的发光亮度一样。数字电路调光是基于人眼对亮度闪烁不够敏感的特性,使负载LED时亮时暗,如果亮暗的频率超过100Hz,人眼看到的就是平均亮度,而不是LED的闪烁(逐渐)。

天下武功,无坚不破,唯快不破!01设计思路调整亮的时间比例实现灯亮度的逐步控制

PWM是PulseWidthModulation的缩写,中文意思就是脉冲宽度调制,简称脉宽调制。它是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,其控制简单、灵活和动态响应好等优点而成为电力电子技术最广泛应用的控制方式,其应用领域包括测量,通信,功率控制与变换,电动机控制、伺服控制、调光、开关电源,甚至某些音频放大器,因此学习PWM具有十分重要的现实意义。02PWM这里面的脉冲宽度即在一个周期内输出有效电平(亮)的时间,也叫占空比。联想同学们拔凉拔凉的期末考试,上学期一共有10门课,小明就过了3门(有效电平),所以,上学期小明的占空比就是:有效/总数=30%。(传说中的凉凉)用PWM技术实现模拟信号:若调制信号的频率远远大于信号接受者的分辨率,则接收者并不能感知数字信号的0和1,它获得的是信号的平均效果,平均值与占空比成有关(正比关系)。

PWM采用调整脉冲占空比的方式达到调整电压与电流的效果。如:在1ms内,高电平占0.3ms,低电平占0.7ms。则LED灯通电0.3ms,断电0.7ms,这样的脉冲占空比为30%。原理视觉看上去是什么感觉?1ms内,这个灯的亮度是30%。PWM工作模式PWM输出比较模式总共有8种常用的是以下两种:PWM信号的生成样式与计数器寄存器(TIMx_CNT)、自动重载寄存器(TIMx_ARR)以及捕获/比较寄存器(TIMx_CCRy)有关。02PWM1模式的信号联想“第25回偷骨殖何九送丧,供人头武二设祭”。CCR就是武大,CNT是武二,ARR是西门。武二比武大个头低的时候是哥哥照顾弟弟(输出有效),武二慢慢长大了从和武大一边高开始,弟弟照顾哥哥(输出无效),后来武二长得更大了和西门一般高就干掉了西门(从新开始计数)。另要是武大本来就比西门高,金莲也就不用手抖了,也就无此回合了。(不能产生脉冲)02PWM2模式的信号PWM信号的生成样式与计数器寄存器(TIMx_CNT)、自动重载寄存器(TIMx_ARR)以及捕获/比较寄存器(TIMx_CCRy)有关。PWM占空比调节图PWM输出频率是不变的(每学期就是那么几门课),改变的是CCR寄存器内的值(通过的课程占总课程门数的比值),此值的改变将导致PWM输出信号占空比的改变(回家过年还是在学校自习)。脉冲调宽信号的形成电路有3种:1)可用电压-脉宽变换器产生,即硬件产生脉宽调制信号;2)由软件定时产生,由定时器定时,定时时间受软件控制,并从脉宽信号的口输出脉宽可调信号;3)由单片机控制外接定时/计数器硬件电路产生脉宽调制信号。

STM32F103VE型号MCU共有8个定时器,编号为TIM1~TIM8,其中包括2个高级控制定时器、4个通用定时器和2个基本定时器。通用和高级定时器都有一个16位的自动加载递加/递减计数器、一个16位的预分频器和4个独立的通道,每个通道都可用于输入捕获、输出比较、PWM和单脉冲模式输出。定时器类型定时器编号计数器位数计数器类型捕获/比较通道数挂载总线/接口时钟定时器时钟高级控制定时器TIM1、TIM816位递增、递减、递增/递减4APB2/72MHz72MHz通用定时器TIM2、TIM3TIM4、TIM516位递增、递减、递增/递减4APB1/36MHz72MHz基本定时器TIM6、TIM716位递增无APB1/36MHz72MHz03STMF103VE中的通用定时器01通用/高级定时器的3种模式用于测量波形的频率和宽度脉宽调制器,产生固定频率但占空比可调的脉冲波形比较两组输入电压的大小产生可调频率且占空比可调的脉冲波形01捕获器:测带宽测频率捕获器用来捕获输入接口的电平变化(上升沿或下降沿)可测量脉冲的宽度,或者测量脉冲频率。当接口产生上升沿或下降沿时,将当前定时器值保存。01输出比较器输出比较器可输出脉冲,可随时调占空比和频率。输出比较器主要用于步进电机、伺服电机的控制。(PWM只能调占空比,也是可以通过程序调频率,但不方便随时调)Up:向上计数(累加)Down:向下计数(递减)CenterAligned1:中央对齐模式1计数器交替地向上和向下计数。输出比较中断标志位,只在计数器向下计数时置位。CenterAligned2:中央对齐模式2计数器交替地向上和向下计数。输出比较中断标志位,只在计数器向上计数时置位。CenterAligned3:中央对齐模式3计数器交替地向上和向下计数。输出比较中断标志位,在计数器向下和向上计数时均置位。01定时器计数模式04如何选择呼吸灯的定时器02CubeMX中定时器设置输出PWM详见tim.c预分频:刘易斯100M跑太快了,改成110M跨栏刘翔就赢了。自动装载ARR:西门大官人设置多高呢?为什么不能是72?100?(凡事不可太尽,凡事太尽则缘分必定早尽。做人留一线,日后好相见。)请自行测试。__HAL_TIM_SET_COMPARE(&htim4,TIM_CHANNEL_3,pwm_value)定时器4通道三占空比值(灯的亮度值)核心代码-灯亮度无符号整型if(pwm_value==0){ pwm_mode=count_up;}elseif(pwm_value==50){ pwm_mode=count_down;}if(pwm_mode==count_up){ pwm_value++;} if(pwm_mode==count_down){pwm_value--;} 核心代码-呼吸效应吸气呼气变亮变暗变化范围是?为什么不是50-100?作业:请将程序进行调整,让PWM工作在PWM2模式,实现呼吸灯效果。提交办法:1.请将工程文件压缩,重命名为:班级+学号+姓名。2.同时提交代码文字说明及试验结果现象截图。

3.发送到530005375@评分办法:1.代码完整可行,工程能正常运行得90分。2.说明清楚明白,注释清晰,加10分。3.两人以上相同,每多一人扣3分。4.其他视完成情况酌情给分。不高于65分。01定时器IO口初始化,设置为复用推挽输出模式(tim.c)0304定时器初始化和设置PWM输出模式05在主函数调用函数启动定时器启动定时器输出PWM06处理中断回调函数404呼吸灯编程流程分析01处理按键中断(gpio.c)0102“1+X”传感网应用开发

RS232标准原理与驱动程序01RS-232标准基础知识02目录CONTENTS

RS232基本工作原理03串口通信程序开发235计算机及微控器RS232接口图片

236一、RS-232标准简介美国电子工业联合会(EIA)与BELL等公司于1962年发布RS-232C标准(协议)的全称是EIA-RS-232C标准,其中EIA代表美国电子工业协会,RS代表推荐标准,232是标识号,C代表RS232的最新一次修改(1969),在这之前,有RS232B、RS232A。它规定连接电缆和机械、电气特性、信号功能及传送过程。它适合于数据传输速率在0~19200b/s范围内的通信。RS232协议电气特性EIA-RS-232C对电气特性、逻辑电平和各种信号线功能都作了规定在TXD和RXD数据线上:逻辑1表示电压范围为-3V至-15V逻辑0表示电压范围为+3V至+15V在RTS、CTS、DSR、DTR和DCD等控制线上:

信号有效表示电压范围为+3V至+15V

信号无效表示电压范围为-3V至-15VRS232协议机械特性由于RS-232C并未定义连接器的物理特性,因此,出现了DB-25、DB-15和DB-9各种类型的连接器,其引脚的定义也各不相同。常用的是DB-25和DB-9两种连接器:DB-9信号脚说明常用信号介绍1.控制信号线(DSR、DTR、RTS、CTS、DCD、RI):DSR:Datasetready,数据装置准备好,表示MODEM处于可以使用的状态DTR:DataTerminalready,数据终端准备好,表示数据终端可以使用RTS:Requesttosend,请求发送,用来表示DTE请求DCE发送数据,即当终端要发送数据时,使该信号有效(ON状态),向MODEM请求发送。它用来控制MODEM是否要进入发送状态。CTS:Cleartosend,允许发送,用来表示DCE准备好接收DTE发来的数据,是对请求发送信号RTS的响应信号。当MODEM已准备好接收终端传来的数据,并向前发送时,使该信号有效,通知终端开始沿发送数据线TxD发送数据。DCD:DataCarrierdectection,接收线信号检出,用来表示DCE已接通通信链路,告知DTE准备接收数据。当本地的MODEM收到由通信链路另一端(远地)的MODEM送来的载波信号时,使RLSD信号有效,通知终端准备接收,并且由MODEM将接收下来的载波信号解调成数字两数据后,沿接收数据线RxD送到终端。RI:振铃指示,当MODEM收到交换台送来的振铃呼叫信号时,使该信号有效(ON状态),通知终端,已被呼叫。2数据发送与接收TxD:Transmitteddata,发送数据,通过TxD终端将串行数据发送到MODEM,(DTE→DCE)。RxD:Receiveddata,接收数据,通过RxD线终端接收从MODEM发来的串行数据,(DCE→DTE)。3地线GND串行通信:数据按位发送,数据位表示0或1并行通信:数据按字节发送。1RS-232标准基本术语单工方式半双工方式全双工方式通信方式波特率:单位时间内传送的二进制数据的位数,以位/秒(b/s)表示,也称为数据位率;数据位:实际数据位的值,一般为5、7、8校验位:在数据位后,起到纠错的作用,有None/Even/Odd/Mark/Space几种;停止位:表示数据传输完成,长度为1、1.5、2;247二、RS232基本工作原理串口按位发送和接收字节,使用三根线完成:地线、发送、接收使用一根数据线发送数据的同时,用另一根数据线接收数据,从而实现远距离通信,其他的线用于握手。三、串口通信程序开发1、串口通信初始化:系统时钟、要开放的IO口和各种寄存器的初始化配置IO口初始化,包括引脚,速率,输入输出模式等。配置USART的波特率,数据位等。启动串口通信2、在主函数中开启打开串口接受中断使能,如果串口有数据传输,会自动触发中断处理函数处理中断,中断处理函数会将接收的完整的一帧数据放入缓冲区等待发送,重复操作,就可以完整的接收一帧一帧的数据3、串口发送和接收数据。在串口处理程序中调用串口发送和接收函数

voidMX_USART1_UART_Init(void){huart1.Instance=USART1;//串口号huart1.Init.BaudRate=115200;//波特率huart1.Init.WordLength=UART_WORDLENGTH_8B;//发送数据字长huart1.Init.StopBits=UART_STOPBITS_1;//停止位huart1.Init.Parity=UART_PARITY_NONE;//奇偶校验位huart1.Init.Mode=UART_MODE_TX_RX;//工作模式huart1.Init.HwFlowCtl=UART_HWCONTROL_NONE;//流量控制huart1.Init.OverSampling=UART_OVERSAMPLING_16;//过采样1、在主函数中调用串口初始化函数(设置串口参数,并且判断串口初始化是否成功)

if(HAL_UART_Init(&huart1)!=HAL_OK)判断串口初始化是否成功{Error_Handler();}}2、在主函数中开启串口接受中断使能,串口有数据传输,会自动触发中断处理函数__HAL_UART_ENABLE_IT(&huart1,UART_IT_RXNE);//开启串口接受中断使能&huart1:串口号USART_IT_RXNE为接收中断标志位,0为打开,1为关闭voidUSER_UART_IRQHandler(){if(__HAL_UART_GET_FLAG(&huart1,UART_FLAG_RXNE)!=RESET)//判断1帧数据是否发送完毕 { __HAL_UART_ENABLE_IT(&huart1,UART_IT_IDLE);//打开空闲帧中断 uart1RxBuff[uart1RxCounter]=(uint8_t)(huart1.Instance->DR&(uint8_t)0x00ff);//接收到的数据转存到缓冲区 uart1RxCounter++;//指针下移至下一个要接收的数据 __HAL_UART_CLEAR_FLAG(&huart1,UART_FLAG_RXNE);//清除接收中断标识位 }if(__HAL_UART_GET_FLAG(&huart1,UART_FLAG_IDLE)!=RESET)//监控总线是否空闲 { __HAL_UART_DISABLE_IT(&huart1,UART_IT_IDLE);//关闭空闲帧中断 uart1RxState=1;//接收完1帧的数据,修改发送标识位,可以发送了 }}中断处理函数USER_UART_IRQHandler()

3、串口发送和接收数据。在串口处理程序中调用串口发送和接收函数HAL_UART_Transmit(&huart1,(uint8_t*)&ch,1,0xffff);//把ch纸箱的内容通过uart1发送出去,长度是1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论