首页 > 其他分享 >【微处理器系统原理与应用设计第十四讲】通用同/异步收发器USART中断模式应用设计

【微处理器系统原理与应用设计第十四讲】通用同/异步收发器USART中断模式应用设计

时间:2024-09-19 13:23:43浏览次数:12  
标签:异步 函数 USART void 收发器 GPIOA 发送数据 数据 USART2

一、功能需求

实现远程串行通信数据的回传确认。微处理器系统构成的测控设备通过USART(串口)与用户设备(上位机)相连。上位机每次发送一个字符后等待测控设备将收到的字符回传到上位机。对于测控设备而言,提供一种回传功能,即收到一个字符就立刻发送出去。

二、设计思路

管脚PA2和PA3分别为USART2的TX和RX信号。当接收到数据时产生中断,在中断中将数据发送出去。

三、程序设计

 (1)USART初始化函数

PCLK为16MHz,波特率为9600,BRR寄存器的值为PCLK/RBaud = 1667。

void UartInit(void)
{
	RCC->AHB1ENR|=1; //使能GPIOA时钟
	RCC->APB1ENR|=1<<17; //使能USART2时钟
	//配置PA2,PA3为复用、推挽输出、高速
	GPIOA->MODER = (GPIOA->MODER&~(0xF<<4))|(0xA<<4);
	GPIOA->OTYPER&=~(0xF<<4);
	GPIOA->OSPEEDR = (GPIOA->OSPEEDR&~(0xF<<4))|(0xA<<4);
	//设置AFRL寄存器,PA2,PA3复用模式为AF7,分别为USART的TX和RX
	GPIOA->AFR[0] = (GPIOA->AFR[0]&~(0xFF<8))|(0x77<8);
	USART2->BRR = 1667;
	USART2->CR1 = (1<<13)|(1<<3)|(1<<2); //使能收发功能
}

(2)串口数据接收函数

UartRx函数用来获取已经接收到的数据,仅当收到数据时才读取数据并成功返回,未收到返回时返回失败。

int UartRx(char* prxd)
{
	if(!(USART2->SR&(0x1<<5)))
		return 0;
	*prxd = (char)USART2->DR; //对指针所指的变量赋值
	return 1;
}

 (3)数据发送函数

UartTx函数用来发送数据,仅当发送数据寄存器空了才写入数据并成功返回,发送数据寄存器未空时返回失败。

int UartTx(char txd)
{
	if(!(USART2->SR&(0x1<<7)))
		return 0;
	USART2-DR = txd;
	return 1;
}

(4)使能接收中断函数

void UartRxIntEn(void)
{
	USART2->CR1|=1<<5;
	NVIC->ISER[1]=1<<6;
}

(5)USART2中断服务函数

void USART2_IRQHandler(void)
{
	char ch;
	while(!UartRx(&ch));
	while(!UartTx(ch));
}

标签:异步,函数,USART,void,收发器,GPIOA,发送数据,数据,USART2
From: https://blog.csdn.net/daviddou2022/article/details/142346529

相关文章

  • 【微处理器系统原理与应用设计第十三讲】通用同/异步收发器USART轮询模式应用设计
    USART提供两设备之间的串行双工通信,并支持中断和DMA工作。采用轮询、中断和DMA三种方式进行数据收发。一、功能需求实现远程串行通信数据的回传确认。微处理器系统构成的测控设备通过USART(串口)与用户设备(上位机)相连。上位机每次发送一个字符后等待测控设备将收到的字符回传到......
  • 优化下载性能:使用Python多线程与异步并发提升下载效率
    文章目录......
  • STM32F407单片机编程入门(七)USART串口485通讯实战含源码
    文章目录一.概要二.USART串口基本介绍三.STM32单片机USART内部结构图四.USART内部信号流向五.USART示波器信号解析六.485通讯基本概念七.CubeMX配置一个USART数据收发例程进行485通讯实验八.工程源代码下载九.小结一.概要USART(UniversalSynchronous/AsynchronousR......
  • SQL Server Service Broker:如何在企业应用中实现高效的异步消息处理|分布式系统中的异
    随着企业应用系统的复杂性不断增加,如何在大规模数据交互中保持高效、稳定的系统性能成为了开发人员的关键挑战。SQLServer的ServiceBroker是一个帮助开发者实现异步消息传递的功能模块,能够有效地处理高并发的数据库操作和事务。通过使用ServiceBroker,企业系统能够在不影响主......
  • SpringBoot 如何利用异步接口,提高系统吞吐量
    一、前言Servlet3.0之前:每一次Http请求都由一个线程从头到尾处理。Servlet3.0之后,提供了异步处理请求:可以先释放容器分配给请求的线程与相关资源,减轻系统负担,从而增加服务的吞吐量。在springboot应用中,可以有4种方式实现异步接口:AsyncContextCallableWebAsyncTaskDeferredResult......
  • linux驱动开发-内核异步通知
    驱动/内核异步通知在Linux驱动程序中,异步通知机制允许内核模块在特定事件发生时主动通知用户空间进程。这样的设计通常用于管理输入输出操作,确保用户程序可以及时获得数据或状态变化而无需频繁查询设备状态。在Linux驱动中,常见的异步通知机制主要有以下几种:信号(Sign......
  • 【python学习】深入掌握 Python RQ 任务队列库:全面处理异步任务的实战指南
    引言rq是基于Redis的Python任务队列库,用于处理异步任务。它能帮助开发者将繁重的后台任务交由独立进程执行,从而提高系统性能。在复杂项目中,任务的超时、重试、定时执行、依赖关系以及队列优先级等功能尤为重要。本文将全面介绍rq的常用和高级功能,帮助你在项目中灵活......
  • 为什么需要异步加载和延迟加载?
    为什么需要异步加载和延迟加载?揭秘异步加载:让小程序加载更快的秘密武器延迟加载:只在需要时加载内容实战演练:在微信小程序中实现异步与延迟加载性能监控与优化:持续提升小程序加载速度在快节奏的数字时代,用户对网页和应用的加载速度要求越来越高。想象一下,当你点击一个......
  • 读构建可扩展分布式系统:方法与实践06异步消息传递
    1. 异步消息传递1.1. 通信是分布式系统的基础,也是架构师需要纳入其系统设计的主要问题1.2. 客户端发送请求并等待服务器响应1.2.1. 这就是大多数分布式通信的设计方式,因为客户端需要得到即时响应后才能继续1.2.2. 并非所有系统都有这个要求1.3. 使用异步通信的......
  • fastapi-events fastapi 异步事件分发处理扩展
    fastapi-eventsfastapi异步事件分发处理扩展,提供了本地,以及远程消息处理能力,同时包含了一些内置的handler,对于自定义handler也是比较灵活的参考使用app.pyfromfastapiimportFastAPIfromfastapi.requestsimportRequestfromfastapi.responsesimport......