精华内容
下载资源
问答
  • AVR系列单片机都带有异步串行接口,而我们现在学习的ATmega64更是有两个串口。我们知道单片机的电平一般都是TTL电平(关于TTL电平与 CMOS电平等其他电平的区别,我们以后单独详解),而计算机的串口是RS-232电平,这两...

    bd81de20-eb1d-eb11-8da9-e4434bdf6706.gif

             AVR系列单片机都带有异步串行接口,而我们现在学习的ATmega64更是有两个串口。我们知道单片机的电平一般都是TTL电平(关于TTL电平与 CMOS电平等其他电平的区别,我们以后单独详解),而计算机的串口是RS-232电平,这两种电平不能互相匹配,所以如果将这两种电平互联,需要一个电平转换电路,本实例中使用常用的MAX232芯片,它实现RS-232电平和TTL电平的互换。

    在MAX232的数据手册中,有这个芯片的典型连接电路,我们直接采用这种电路即可。关于MAX232的连接电路,其实非常简单,我们只要记住4电容(或 5电容)就可以了。这里的4电容指的是电路中只需要连接4个电容就可以;至于5电容,多出来的那个电容是连接VCC和GND之间的电容,这个电容可以不接,但是从考虑电源的稳定性上来说,建议接上。至于电路中电容大小的选择可以参考数据手册,需要注意的是这里要用无极性电容(不区分正负极)。电容值一般有三种选择0.1uF、1uF、10uF.电容值的大小会影响到端口的驱动能力,电容大,驱动能力强,电容小,驱动能力弱。通常使用1uF的电容就足够了。

    RS-232串行通信电路图如下所示:

    be81de20-eb1d-eb11-8da9-e4434bdf6706.png

    bf81de20-eb1d-eb11-8da9-e4434bdf6706.jpeg

    c181de20-eb1d-eb11-8da9-e4434bdf6706.jpeg

    为了方便大家更好的学习,您还可以关注畅学电子和EDA的公众号,每天推送相关知识,希望能对你的学习有所帮助!

    c281de20-eb1d-eb11-8da9-e4434bdf6706.jpeg

    c381de20-eb1d-eb11-8da9-e4434bdf6706.jpeg

    展开全文
  • 基础实验 – 基于省赛资源套装 ex9 EXTI外部中断实验 实验目的:掌握定时器USART发送字符串...串口助手接收到“GXCT IOT USART TEST TX”。 计算机通信 计算机通信的概念 将计算机技术和通信技术相结合,完成计算机...

    基础实验 – 基于省赛资源套装

    ex9 EXTI外部中断实验

    实验目的:掌握定时器USART发送字符串的方法。
    实验内容:USART2发送字符串“GXCT IOT USART TEST TX”。
    实验现象:PC端打开串口助手,连接USART2的TX和RX引脚。串口助手接收到“GXCT IOT USART TEST TX”。

    计算机通信

    计算机通信的概念

    将计算机技术和通信技术相结合,完成计算机与外部设备或计算机与计算机之间的信息交换。按照数据传输方式的不同,可以分为串行通信和并行通信两类。

    串行通信

    数据逐位传输,传输线少,长距离传输时成本低,但数据的传输控制较复杂。按照实现数据同步的方式,可以分为同步串行和异步串行两种。
    在这里插入图片描述

    并行通信

    多位数据同时传输,传输控制简单,传输速度快,但是在长距离
    传输时硬件成本较高。
    在这里插入图片描述

    异步串行通信的字符格式

    在这里插入图片描述

    波特率

    每秒钟传送二进制数码的位数,以bit/s (bps) 为单位。
    ●常用的波特率有: 9600、 19200、 38400、 57600和11 5200;
    ●波特率为115200,表示每秒传输1 1 5200位,且每- -位数据在数据线上持续时间为Tbit = 1/115200≈8.68us。

    串口初始化过程

    在这里插入图片描述

    STM32CubeMX配置

    1. 目标选择
    2. 引脚分配
    3. 外设配置
    4. 时钟配置
    5. 工程配置

    1.目标选择

    新建工程
    在这里插入图片描述
    选择MCU 输入STM32L071KB
    在这里插入图片描述
    在这里插入图片描述

    2.引脚分配

    PC15引脚:GPIO_Output(输出模式)
    在这里插入图片描述

    3.外设配置

    在这里插入图片描述
    PC15引脚配置
    GPIO输出电平:高
    GPIO模式:推挽输出
    GPIO上拉电阻/下拉电阻:不上拉电阻/下拉电阻
    输出速度:低
    在这里插入图片描述
    USART2引脚配置
    在这里插入图片描述
    在这里插入图片描述

    4.时钟配置

    时钟源:旁路时钟源
    在这里插入图片描述
    时钟频率:32MHz
    在这里插入图片描述

    5.工程配置

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    keil5程序编写

    1.选择STM32L071KBUx芯片

    在这里插入图片描述

    2.添加代码

    USER CODE BEGIN PMUSER CODE END PM之间添加以下代码

    uint8_t RecBuf[10] = "GXCT IOT USART TEST TX";     //定义发送缓冲区
    uint8_t TecBuf[10]                                 //定义接收缓冲区**USER CODE BEGIN 3****USER CODE END 3**之间添加串口发送代码
    

    USER CODE BEGIN 3USER CODE END 3之间添加串口发送代码

    HAL_UART_Transmit(&huart2,(uint8_t *)TecBuf,22,100);        //串口发送
    

    USER CODE BEGIN 3USER CODE END 3之间添加串口接收代码

    HAL_UART_Transmit(&huart2,(uint8_t *)TecBuf,22,100);        //串口发送
    	if( HAL_UART_Receive(&huart2,(uint8_t *)RecBuf,12,100) == HAL_OK )
    	{
    		if( RecBuf == "Turn Off LD5" )    //判断接收到的字符串是否是“Turn Off LD5
    		{                                 //将LD5关闭
    			HAL_GPIO_WritePin(GPIOC, GPIO_PIN_15, GPIO_PIN_SET);
    		}
    	}
    HAL_Delay(1000);
    

    当USER按键按下后,触发外部中断,进入中断服务函数,中断服务函数调用该Callback函数。函数中将LD5的状态反转。

    3.HAL库函数解析

    外部中断通用处理函数 : void HAL GPIO_ EXTI IRQHandler(uint16_ t GPIO Pin)

    功能描述 作为所有外部中断发生后的通用处理函数,所有外部中断服务程序均调用该函数完成中断处理,函数内部调用外部中断回调函数HAL GPIO EXTI Callback完成实际的
    入口参数 GPIO Pin:连接到对应外部中断线的引脚,范围是GPIO PIN 0 ~ GPIO PIN 15

    外部中断回调函数 : void HAL GPIO_ EXTI Callback(uint16_ t GPIO_ Pin)

    功能描述 外部中断回调函数,用于处理具体的中断任务,该函数由外部中断通用处理函数HAL GPIO EXTI IRQHandler调用,完成所有外部中断的任务处理
    入口参数 GPIO Pin:连接到对应外部中断线的引脚,范围是GPIO_PIN_0 ~ GPIO_PIN_15

    GPIO输入读取函数 : HAL_GPIO_ReadPin(GPIOx, GPIO_Pin)

    入口参数 描述
    GPIOx GPIO端口,GPIOA~GPIOC
    GPIO_Pin 连接到对应外部中断线的引脚,范围是GPIO_PIN_0 ~ GPIO_PIN_15
    展开全文
  • STM32串口通信设计

    2020-06-18 15:03:12
    void My_USART1_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); RCC_...

    void My_USART1_Init(void)
    {
    GPIO_InitTypeDef GPIO_InitStructure;
    USART_InitTypeDef USART_InitStructure;
    NVIC_InitTypeDef NVIC_InitStructure;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
    
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
    GPIO_Init(GPIOA,&GPIO_InitStructure);
    
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
    GPIO_Init(GPIOA,&GPIO_InitStructure);
    
    USART_InitStructure.USART_BaudRate=115200;
    USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
    USART_InitStructure.USART_Mode=USART_Mode_Tx|USART_Mode_Rx;
    USART_InitStructure.USART_Parity=USART_Parity_No;
    USART_InitStructure.USART_StopBits=USART_StopBits_1;
    USART_InitStructure.USART_WordLength=USART_WordLength_8b;
    USART_Init(USART1,&USART_InitStructure);
    
    USART_Cmd(USART1,ENABLE);
    
    USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
    
    NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
    NVIC_Init(&NVIC_InitStructure);
    

    }

    void USART1_IRQHandler(void)
    {
    u8 res;
    if(USART_GetITStatus(USART1, USART_IT_RXNE))
    {
    res=USART_ReceiveData(USART1);
    USART_SendData(USART1,res);
    }
    }

    int main(void)
    {
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    My_USART1_Init();
    while(1);

    }

    用串口输入来触发中断,中断中用串口输出

    展开全文
  • 采用USART串口通信,波特率为9600,一个单片机发送数字(自己的学号后两位) 一个单片机接收,并把接收的数字用数码管显示。 需要源码和仿真图可以加我QQ2142686503 接收部分程序: 串口接收 #include"usart.h" ...

    采用USART串口通信,波特率为9600,一个单片机发送数字(自己的学号后两位)
    一个单片机接收,并把接收的数字用数码管显示。
    需要源码和仿真图可以加我QQ2142686503
    请添加图片描述
    请添加图片描述
    接收部分程序:
    串口接收

    #include"usart.h"
    
    unsigned char buf;			//头文件为声明,此处为定义
    bit flag;					//显示标志
    
    void UsartInit(void)		//9600bps @11.0592MHz
    {
    	PCON &= 0x3F;	//启用SM0  SMOD=0  复位时为0
    	SCON = 0x50;	//方式一8位 不加倍 SM0 SM1 SM2 REN(接受控制位) TB8 RB8 TI RI  
    	AUXR &= 0xBF;	//定时器1时钟为Fosc/12,即12T
    	AUXR &= 0xFE;	//串口1选择定时器1为波特率发生器
    	TMOD &= 0x0F;	//清除定时器1模式位
    	TMOD |= 0x20;	//设定定时器1为8位自动重装方式
    	TL1 = 0xFD;		//设定定时初值
    	TH1 = 0xFD;		//设定定时器重装值
    	ET1 = 0;		//禁止定时器1中断
    	TR1 = 1;		//启动定时器1
    
    	EA = 1;
        ES = 1;              //允许串口中断
    }
    
    void Usart() interrupt 4
    {
    	buf = SBUF;			   //读取缓冲区值 
    	flag = 1;				//接受一次后打开显示
    	ES = 0;                //关闭串行中断
        RI = 0;                //清除串行接受标志位
    //	ES = 1;
    }
    

    显示数字函数

    #include"display.h"
    #include"delay.h"
    
    unsigned char code table[]={0x00  , 0x01 , 0x02 , 0x03 , 0x04 ,
     0x05 ,0x06 ,0x07,0x08,0x09};	 //0----9
    
    void Display(unsigned char i)	//数码管数值显示
    {
    	static unsigned char ge, shi, mode;
    	if(mode!=i)	  //当值未改变时,去除计算,减少一次while循环时间
    	{
    		ge  =  i % 10;
    		shi =  i / 10;
    		mode = i;	  //记录上一次值
    	}  	
    
    	P2 = table[ge]  + 0xf0;		//数据+关闭位选
    	delay(1);
    	P2 &= 0xdf;					//打开位选  共阴极低电平亮
    	delay(5);					//充分显示
    	
    	P2 |= 0xf0;	   				//消影
    	delay(1);
    
    	P2 = table[shi] + 0xf0;					//P2位选 个位P2^7 十位P2^6 
    	delay(1);  	
    	P2 &= 0xef;
    	delay(5);
    }
    

    主函数

    #include"reg52.h"
    #include"usart.h"
    #include"display.h"
    #include"delay.h"
    
    
    void main(void)
    {
    	UsartInit();
    	while(1)
    	{
    		while(flag)			//接受到数据才开始显示
    		{
    			Display(buf);	//显示接收值
    			delay(5);
    		}
    	}
    }
    

    发送单片机函数

    void UART_SendBit(unsigned char Data)	//发送数据
    {
      	SBUF=Data;		//写SUBF指令,启动发送
    	while(!TI);		//发送完毕,TI置1,请求中断(无中断函数)
    	TI=0;			//手动清零
    }
    
    
    void UsartInit(void)		//9600bps@11.0592MHz
    {
    	PCON &= 0x3F;	//启用SM0  SMOD=0  复位时为0 波特率不倍速
    	SCON = 0x50;	//8位数据,可变波特率  SM1 SM2 REN(接受控制位) TB8 RB8 TI RI  
    	AUXR &= 0xBF;	//定时器1时钟为Fosc/12,即12T
    	AUXR &= 0xFE;	//串口1选择定时器1为波特率发生器
    	TMOD &= 0x0F;	//清除定时器1模式位
    	TMOD |= 0x20;	//设定定时器1为8位自动重装方式
    	TL1 = 0xFD;		//设定定时初值
    	TH1 = 0xFD;		//设定定时器重装值
    	ET1 = 0;		//禁止定时器1中断
    	TR1 = 1;		//启动定时器1
    }
    
    展开全文
  • STM32串口通信、串口调试助手

    万次阅读 2018-12-05 14:09:23
    STM32学习之旅④ USART串口和上位机通信 STM32学习之旅⑤ SPI控制TFT,从底层到底层的设计 目录: 一、认识其本质 (一)串口 (二)协议 (三)时序 (四)上位机 二、所需材料 三、USART的介绍 四、USART串口的...
  • 设计要点: 1、要是能串口时钟同时要是能复用总线时钟和对应的IO时钟,如: //使能串口1,PA,AFIO总线 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO | RCC_APB2Periph_USART1 ,...
  • AVR系列单片机都带有异步串行接口,而我们现在学习的ATmega64更是有两个串口。我们知道单片机的电平一般都是TTL电平(关于TTL电平与 CMOS电平等其他电平的区别,我们以后单独详解),而计算机的串口是RS-232电平,这...
  • 为了简化设计方便,就想着使用串口完成一对多通信, 一来是硬件简单不需要外加, 二是USART的配置简单,门槛低...~~(其实就是我懒)~~ 为了方便测试,先将两块STM32刷入1个已经编号的程序. like this: 因为现在...
  • UART通用异步收发传输器(Universal Asynchronous ...二、通信协议UART作为异步串口通信协议的一种,工作原理是将传输数据的每个字符一位接着一位传输。传输一帧中格式为:起始位、数据位、奇偶校验位、停止位、空...
  • 本文介绍,通过中断方式运用STM32串口USART1。首先,总结全文,设计步骤主要如下:1,初始化GPIO2,初始化USART13,初始化NVIC(嵌套向量中断控制器)4,编写中断服务函数5,编写主函数详细步骤如下:1,初始化...
  • 示例-串口重定向设计思路函数实现三、中断方式串口通信串口中断处理过程1.接口函数2.示例-固定长度收发1)使用MX完成串口外设初始化配置2)使用MDK完成用户代码编写3.示例-实现简单的帧格式通信(可变长数据)Modbus...
  • 首先总结全文,通过查询方式运用USART1口收发数据的主要步骤如下:初始化GPIO口初始化串口编写发送数据函数编写主函数下面介绍详细步骤:1.初始化GPIO口通过查阅STM32数据手册可知,stm32f103c8 ,USART1的输入、...
  • 1、蓝桥杯嵌入式开发板串口USART2占用PA2、3 在嵌入式设计与开发\STM32固件库v3.5\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Examples\USART\Interrupt\main函数复制初始化函数 ```css void ...
  • proteus仿真stm32利用串口通信方式,实现对电路中指示灯的控制。 实现功能 发送小写字符“o”,开启指示灯LD2,发送小写字符“c” 设计思路 本实验采用stm32f103r6为主控芯片,及led-green、Virtual terminal;...
  • 第30章 STM32H7的USART应用之八个串口FIFO实现本章节为大家讲解STM327的8个串口的FIFO驱动实现,后面的ESP8266,GPS,RS485,GPRS等试验都是建立在这个驱动的基础上实现。除了串口FIFO的驱动实现,RS232通信也通过本...
  • 基于MSP430系列单片机自身优越的性能以及其超低功耗的特点,利用MSP430F149的USART可以实现这种分布式多机通信功能。在解决了与PC串口或其他带有串口的终端相连所需要的串口电平和逻辑关系的转变之后,选用MSP430F...
  • NRF24L01+USART搞定有线和无线通信

    千次阅读 2015-05-07 23:16:26
    这时就需要在现场部分具备无线数据发送装置,而在上位机部分由于一般只有串口,所以将采集到的数据送到电脑里又要在上位机端设计一个数据接收的适配器。这里基于stm32分别设计了现场部分和适配器部分,这里只是基本...
  • 用模块化方法重新完成EXP_USART1_Receive_...(1) 配置SYS、外部晶振、时钟、GPIO(PC12标签为“LED”)(2) 配置USART1 配置UART1串口通信参数配置UART1串口中断配置中断优先级(3) 设置生成代码文件方式并生成代码gener...
  • 这时就需要在现场部分具备无线数据发送装置,而在上位机部分由于一般只有串口,所以将采集到的数据送到电脑里又要在上位机端设计一个数据接收的适配器。这里基于stm32分别设计了现场部分和适配器部分,这里只是基本...
  • 自己编写的ATmega16的C语言程序,包括ADC单通道的连续转换,115.2kbps的USART串口通信以及基于Timer1的PWM程序,自己经过Proteus仿真,与实物测试,绝对可用--我毕业设计的一部分!
  • 用模块化方法重新完成EXP_USART1_Receive_...(1) 配置SYS、外部晶振、时钟、GPIO(PC12标签为“LED”)(2) 配置USART1 配置UART1串口通信参数配置UART1串口中断配置中断优先级(3) 设置生成代码文件方式并生成代码gener...
  • 第31章 STM32H7的USART应用之RS485本章教程为大家讲解USART应用之485总线。虽然这几年无线网络的使用率有所上升,有线的串行网络仍然提供最有力、最可靠的通信,特别是在恶劣的环境中。在需要抗噪、抗静电、抗电压...
  •  本嵌入式多参数监护仪HOST端使用AT91RM9200处理器,该处理器具有4个通用同步/异步接收/发送器(USART),其中一个是DEBUG串口,但它们都是分时复用的[1]。为了使HOST端更好地与各采集模块进行通信,必须解决其串口...
  • 串口通信:是一种设备间常用的串行,以比特位形式收发数据,电子工程师经常使用这种方式调试。 程序设计 PA9(TX),PA10(RX) 参考帮助文档STM32F4xx_StdPeriph_Examples/USART/USART_Printf/main.c 需要修改 Edit...
  • stm32----usart

    2020-08-21 17:17:59
    USART在STM32中的应用最多莫过于“打印”程序信息,一般在硬件设计时都会 预留一个USART通信接口连接电脑,用于在调试程序时把一些调试信息“打印” 在电脑端的串口调试助手工具上,从而了解程序运行是否正确、如果...

空空如也

空空如也

1 2 3
收藏数 55
精华内容 22
关键字:

usart串口通信设计