Renesas MCU之串口的发送接收功能实现

目录

概述

1 软硬件介绍

1.1 软件版本信息

1.2  硬件介绍

2 FSP配置项目 

2.1 项目参数配置

2.2 配置UART参数

3 功能实现

3.1 软件架构实现

3.2 UART接口函数

3.2.1 R_SCI_UART_Open()

3.2.2 R_SCI_UART_Close()

3.2.3 R_SCI_UART_Read()

3.2.4 R_SCI_UART_Write()

3.2.5 R_SCI_UART_CallbackSet()

4 串口功能实现

4.1 初始化函数

4.2 设置Buad函数

 4.3 串口中断函数

 4.4 源代码

5 测试

6 参考文档


概述

本文主要介绍使用Renesas MCU之串口的发送接收功能实现,包括硬件资源介绍,FSP配置项目的方法,还介绍了UART的接口函数,还编写测试函数验证该功能。

1 软硬件介绍

1.1 软件版本信息

软硬件信息版本信息
Renesas MCUR7FA4M2AD3C
KeilMDK ARM 5.38
FSP 版本5.3.0
调试工具:st-linkST-LINK/V2-1

1.2  硬件介绍

笔者使用的板卡上UART端口通过USB-UART芯片CH340G做转换,实现串口收发数据功能

TXD:    P110

RXD:    P109

2 FSP配置项目 

2.1 项目参数配置

1)配置系统时钟

笔者使用的开发板上配置的晶振为12M Hz,在Clock时钟蓝选择该型号的时钟配置参数

2)配置debug接口,选择swo类型

3)配置TX和RX的IO接口

2.2 配置UART参数

1)在Stacks中创建UART对象

2) 配置uart的参数

注意:在Interrupt中定义Callback函数g_uart0_Callback

3 功能实现

3.1 软件架构实现

在FSP中配置完成参数后,点击Generate Project生成项目文件

3.2 UART接口函数

该模块使用TXD和RXD与外部设备通信。CTS或RTS或两者都可以由硬件控制(CTS和RTS)。一些mcu在某些通道上支持CTS和RTS的硬件流控制。一些mcu和通道支持CTS或RTS的硬件流控制,但不支持两者。如果两者都需要,GPIO引脚可以用于RTS。当内部时钟是波特率发生器的源时,SCK引脚可用于输出与比特率相同频率的时钟。

3.2.1 R_SCI_UART_Open()

函数原型:

fsp_err_t R_SCI_UART_Open	(	uart_ctrl_t *const 	p_api_ctrl,uart_cfg_t const *const 	p_cfg )	

根据输入配置配置UART驱动程序。如果在编译时启用接收,则在此函数结束时启用接收。实现串口uart_api_t::open打开功能。

3.2.2 R_SCI_UART_Close()

函数原型:

fsp_err_t R_SCI_UART_Close	(	uart_ctrl_t *const 	p_api_ctrl	)	

中止任何正在进行的传输。禁用中断、接收器和发送器。如果使用,关闭较低级别传输驱动程序。删除的权力。应用uart_api_t::close实现关闭串口功能。

3.2.3 R_SCI_UART_Read()

函数原型:

fsp_err_t R_SCI_UART_Read	(	uart_ctrl_t *const 	p_api_ctrl,uint8_t *const 	p_dest,uint32_t const 	bytes )	

在目标缓冲区指针中接收用户指定的字节数

3.2.4 R_SCI_UART_Write()

函数原型:

fsp_err_t R_SCI_UART_Write	(	uart_ctrl_t *const 	p_api_ctrl,uint8_t const *const 	p_src,uint32_t const 	bytes )	

从源缓冲区指针传输用户指定的字节数。

3.2.5 R_SCI_UART_CallbackSet()

函数原型:

fsp_err_t R_SCI_UART_CallbackSet	(	uart_ctrl_t *const 	p_api_ctrl,void(*)(uart_callback_args_t *) 	p_callback,void const *const 	p_context,uart_callback_args_t *const 	p_callback_memory )	

更新用户回调,并可选择为回调结构提供内存.

4 串口功能实现

4.1 初始化函数

代码第91行:打开串口

代码第93行:从串口读取数据

代码第95行:从串口写数据

4.2 设置Buad函数

代码第73行:计算baud

代码第78行:设置串口baud

 4.3 串口中断函数

代码第24行:接收数据事件,在该事件里接收数据包

代码第47行:接收数据完成事件

代码第53行:发送数据完成事件

 4.4 源代码

创建bsp_uart.c文件,编写如下代码:

 /*FILE NAME  :  bsp_uart.cDescription:  uart interfaceAuthor     :  tangmingfei2013@126.comDate       :  2024/06/03*/
#include "bsp_uart.h"#define  TRANSFER_LENGTH     128bool uart_send_complete_flag = false;
uint8_t  g_dest[TRANSFER_LENGTH];
uint8_t  g_src[TRANSFER_LENGTH];
uint8_t  g_out_of_band_received[TRANSFER_LENGTH];
uint32_t g_receive_complete  = 0;
uint32_t g_out_of_band_index = 0;void g_uart0_Callback (uart_callback_args_t * p_args)
{/* Handle the UART event */switch (p_args->event){/* Received a character */case UART_EVENT_RX_CHAR:{/* Only put the next character in the receive buffer if there is space for it */if (sizeof(g_out_of_band_received) > g_out_of_band_index){/* Write either the next one or two bytes depending on the receive data size */if (UART_DATA_BITS_8 >= g_uart0_cfg.data_bits){g_out_of_band_received[g_out_of_band_index++] = (uint8_t) p_args->data;}else{uint16_t * p_dest = (uint16_t *) &g_out_of_band_received[g_out_of_band_index];*p_dest              = (uint16_t) p_args->data;g_out_of_band_index += 2;}if( g_out_of_band_index >= TRANSFER_LENGTH )g_out_of_band_index = 0;}break;}/* Receive complete */case UART_EVENT_RX_COMPLETE:{g_receive_complete = 1;break;}/* Transmit complete */case UART_EVENT_TX_COMPLETE:{uart_send_complete_flag = true;break;}default:{}}
}#define SCI_UART_BAUDRATE_19200              (19200)
#define SCI_UART_BAUDRATE_ERROR_PERCENT_5    (5000)void r_sci_uart_baud_set (uint32_t baud_rate )
{baud_setting_t baud_setting;bool           enable_bitrate_modulation = false;uint32_t       error_rate_x_1000         = SCI_UART_BAUDRATE_ERROR_PERCENT_5;fsp_err_t err = R_SCI_UART_BaudCalculate( baud_rate, enable_bitrate_modulation, error_rate_x_1000, &baud_setting);assert(FSP_SUCCESS == err);err = R_SCI_UART_BaudSet(&g_uart0_ctrl, (void *) &baud_setting);assert(FSP_SUCCESS == err);
}void r_sci_uart_basic_init (void)
{/* Initialize p_src to known data */for (uint32_t i = 0; i < TRANSFER_LENGTH; i++){g_src[i] = (uint8_t) ('A' + (i % 26));}/* Open the transfer instance with initial configuration. */fsp_err_t err = R_SCI_UART_Open(&g_uart0_ctrl, &g_uart0_cfg);assert(FSP_SUCCESS == err);err = R_SCI_UART_Read(&g_uart0_ctrl, g_dest, TRANSFER_LENGTH);assert(FSP_SUCCESS == err);err = R_SCI_UART_Write(&g_uart0_ctrl, g_src, TRANSFER_LENGTH);assert(FSP_SUCCESS == err);
}int fputc(int ch, FILE *f)
{(void)f;R_SCI_UART_Write(&g_uart0_ctrl, (uint8_t *)&ch, 1);while(uart_send_complete_flag == false);uart_send_complete_flag = false;return ch;
}/* End of this file */

5 测试

编译代码,下载到板卡中 ,复位板卡后,在调试终端会看见接收到的数据

发送数据测试,使用ST--LINK测试,监测buff中的数据

6 参考文档

RA Flexible Software Package Documentation  Release v5.3.0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/23173.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java自学阶段二:JavaWeb开发50(Spring和Springboot学习)

Spring、Springboot基础知识学习 目录 学习目标Spring基础概念IOC控制反转DI依赖注入事务管理AOP面向切面编程Spring案例说明&#xff08;Postman使用、Restful开发规范、lombok、Restful、nginx了解&#xff09; 一&#xff1a;学习目标&#xff1a; 1&#xff09;了解Sprin…

如何解决chatgpt出现503 bad gateway的问题

昨日&#xff0c;ChatGPT官网挂了&#xff0c;也就是使用web网页端访问的用户&#xff0c;会出现 bad gateway 情况。我们去ChatGPT官方的监控查看&#xff0c;已经展示相关错误。 影响的范围有&#xff1a; 影响了 ChatGPT 所有计划的所有用户。影响包括所有与 ChatGPT 相关…

React:Expected property name or ‘}‘ in JSON at position 1

代码&#xff1a; import { Form, Input, Button } from antd export default function FormCom() {function onFinish(a, b, c, d) {console.log(a, b, c, d)}const describe "{tip:请输入用户名}"return (<><Form onFinish{onFinish}><Form.Itemn…

1V1音视频实时互动直播系统

李超老师的项目 先肯定分为两个两个端&#xff0c;一个是服务器端一个是客户端。客户端用于UI界面的显示&#xff0c;服务器端用于处理客户端发来的消息。 我们先搭建stun和turn服务器 首先介绍一下什么是stun协议&#xff0c; 它是用来干什么的&#xff1f; stun协议存在…

Nginx网站服务【☆☆☆】

市面上常用Linux的web服务器&#xff1a;apache、Nginx。 apache与nginx的区别&#xff1f; 最核心的区别在于NGINX采用异步非阻塞机制&#xff0c;多个连接可以对应一个进程&#xff1b;apache采用的是同步阻塞多进程/线程模型&#xff0c;一个连接对应一个进程。apache美国…

MacOS 安装C语言版TensorFlow

文章目录 安装C语言版TensorFlow解压归档环境变量c_api.hC语言示例 安装C语言版TensorFlow 官方文档&#xff1a;https://tensorflow.google.cn/install/lang_c?hlzh-cnTensorFlow 提供了一个 C API&#xff0c;该 API 可用于为其他语言构建绑定。该 API 在 c_api.h 中定义&a…

从C到C++,C++入门(2)

在C入门篇&#xff08;1&#xff09;中&#xff0c;博主为大家简单介绍了什么是C&#xff0c;以及C中的关键字&#xff0c;命名空间&#xff0c;输入与输出和缺省参数的相关知识。今天就让我们继续一起学习C的基础知识点吧&#xff01;&#xff01; 1.函数重载 1.1函数重载的概…

经典的泡泡龙游戏源码免费下载

源码介绍 HTML5泡泡龙冒险小游戏是一款休闲网页游戏&#xff0c;游戏玩法是玩家从下方中央的弹珠发射台射出彩珠&#xff0c;多于3个同色珠相连则会消失。 源码下载 经典的泡泡龙游戏源码免费下载

C# WPF入门学习主线篇(六)—— TextBox常见属性和事件

欢迎回到C# WPF入门学习系列的第六篇。在前面的文章中&#xff0c;我们探讨了按钮&#xff08;Button&#xff09;的事件处理。今天&#xff0c;我们将继续学习另一个常用的WPF控件——TextBox。本文将介绍 TextBox 的常见属性和事件&#xff0c;并通过示例代码展示如何在实际应…

企业办公网安全管控挑战与解决方案

在数字化浪潮的推动下&#xff0c;企业正经历前所未有的变革。然而&#xff0c;随之而来的是一系列复杂的网络安全风险和挑战。我们的网络边界不再清晰&#xff0c;各种设备轻松接入企业网络&#xff0c;这不仅带来了便利&#xff0c;也极大地增加了安全风险。想象一下&#xf…

JavaScript 学习笔记 总结

回顾&#xff1a; Web页面标准 页面结构&#xff1a;HTML4、HTML5页面外观和布局&#xff1a;CSS页面行为&#xff1a;JavaScript强调三者的分离前后端分离开发模式 响应式设计Bootstrap框架入门 Bootstrap总结 基础 下载和使用基础样式&#xff1a;文本样式、图片样式、表格…

笔记 | 软件工程03:软件过程和软件开发方法

软件过程 1 何为软件过程模型 1.1 软件开发的特点 1.2 软件过程 1.3 软件过程模型 1.3.1 软件过程模型产生的背景 软件工程产生之前的软件开发——作坊式的个人创作&#xff1a;聚焦于编写代码&#xff1b;依靠个体技能&#xff0c;缺乏合作&#xff1b;关注时空利用&#x…

Threejs加载DOM+CSS到场景中,实现3D场景展示2D平面的效果

1. 前言 本篇文章主要实现了将DOM元素转换为Threejs可以使用的数据结构,使用CSS2DRenderer渲染器渲染这些DOMCSS的平面,使其可以作为一个物体添加到Threejs场景里 如下效果图: 2. 实现步骤 首先创建一个ThreejsVueVite的项目,作为本次的demo项目下载Threejs第三方库 yarn…

C++候捷stl-视频笔记4

一个万用的hash function 哈希函数的形式&#xff0c;一种是一般函数(右边)&#xff0c;一种是成员函数(左边)&#xff0c;类的对象将成为函数对象 具体做法例子。直接把属性的所有hash值加起来&#xff0c;会在hashtable中会产生很多的碰撞&#xff0c;放在同一个bucket中的元…

游戏UI设计秘诀:专家总结与实际案例解析!

随着游戏产业的不断发展&#xff0c;游戏UI界面设计变得越来越重要。一个好的游戏UI界面设计可以让玩家更容易理解游戏规则&#xff0c;提高游戏的可玩性&#xff0c;增加游戏的吸引力。在本文中&#xff0c;我们将讨论游戏UI界面设计的重要性和一些常见的设计原则。 1. 游戏U…

前端框架中的虚拟DOM和实际DOM之间的关系

聚沙成塔每天进步一点点 本文回顾 ⭐ 专栏简介前端框架中的虚拟DOM和实际DOM之间的关系1. 实际DOM&#xff08;Real DOM&#xff09;1.1 定义1.2 特点 2. 虚拟DOM&#xff08;Virtual DOM&#xff09;2.1 定义2.2 特点 3. 虚拟DOM的工作流程3.1 创建虚拟DOM3.2 比较虚拟DOM&…

Django redirect()函数实现页面重定向

1&#xff0c;通过路由反向解析进行重定向 1.1 添加视图函数 myshop/app2/views.py from django.http import HttpResponse from django.shortcuts import render from django.urls import reverse def index(request):return HttpResponse("app2 的index")# 反向…

PVE安装虚拟主机

本文记录PVE安装其他虚拟主机的步骤&#xff0c;以安装win-server为例。裸机安装PVE则不是本文主题。 准备文件 获取Windows系统镜像 win server镜像可以从官网获取普通Windows镜像可从MSDN获取此外&#xff0c;安装Windows系统还需要从PVE下载特殊驱动 获取Windows必要驱动 …

康谋技术 | 自动驾驶:揭秘高精度时间同步技术(二)

在自动驾驶中&#xff0c;对车辆外界环境进行感知需要用到很多传感器的数据&#xff08;Lidar&#xff0c;Camera&#xff0c;GPS/IMU&#xff09;&#xff0c;如果计算中心接收到的各传感器消息时间不统一&#xff0c;则会造成例如障碍物识别不准等问题。 为了对各类传感器进…

提高工作效率的神器有哪些?

在这个人工智能技术蓬勃发展的时代&#xff0c;很多AI工具极大地提升我们的工作效率&#xff0c;比如很多人在用的ChatGPT、Kimi&#xff0c;它们几乎无所不能&#xff0c;小编在日常工作也用它们&#xff0c;建议想抓住AI风口&#xff0c;或者是想用这些工具提升自己的朋友去学…