0701_ARM5
练习:使用usart4
main.c
#include "uart4.h"int main()
{// 初始化 UART4hal_uart4_init();while (1) {// 发送一个字符串//hal_put_char( hal_get_char());hal_put_string(hal_get_string());}return 0;
}
usart4.c
#include "uart4.h"//******引脚PB2读取 PG11写入*****//rcc,gpio,uart,初始化
void hal_uart4_init(){//rcc章节初始化//1.使能GPIOB组控制器RCC->MP_AHB4ENSETR |= (0X1<<1);//2.是能GPIOG组控制器RCC->MP_AHB4ENSETR |= (0X1<<6);//3.是能UART4控制器RCC->MP_APB1ENSETR |= (0x1<<16);//GPIO章节初始化//1.GPIOB_MODE寄存器初始化 设置对应引脚模式功能 复用功能GPIOB->MODER &= ~(0x3<<4); //MODER默认为0xffffffff 先将4,5为清零GPIOB->MODER |= (0x2<<4);//2.GPIOG_MODE寄存器初始化 设置对应引脚模式功能 复用功能GPIOG->MODER &= ~(0x3<<22); GPIOG->MODER |= (0x2<<22);//3.GPIOB_AFRL寄存器设置对应引脚复用功能GPIOB->AFRL &= ~(0x0f<<8);GPIOB->AFRL |= (0x8<<8); //AFRL默认为0x00000000 所以这里直接按位|//4.GPIOG_AFRH寄存器设置对应引脚复用功能GPIOG->AFRH &= ~(0x0f<<12);GPIOG->AFRH |= (0x6<<12); //PG11在AFRH寄存器中//UART章节初始化//1.USART4串口控制寄存器初始化//USART4_CR1初始值为0x00000000//1.8位数据位USART4->CR1 &= ~(0x1<<12);USART4->CR1 &= ~(0x1<<28);//2.16倍采样率USART4->CR1 &= ~(0X1<<15);//3.无校验位USART4->CR1 &= ~(0X1<<10);//4.设置发送和接收使能USART4->CR1 |= (0x6<<1);//USART4_CR2寄存器 设置停止位//USART4_CR2 默认值 0x00000000//5.1个停止位USART4->CR2 &= ~(0X3<<12);//6.设置波特率USART4->BRR = 0X22B;//7.设置串口使能USART4->CR1 |= 0x1;//USART4_PRESC 寄存器设置串口分配//USART4_PRESC初始值位0x00000000//8.不分频USART4->PRESC &= ~(0x0f);}
//发送字符
void hal_put_char(const char str){//判断发送数据是否为空while(!(USART4->ISR & (0X1<<7))){//将数据写入寄存器中}USART4->TDR = str;while(!(USART4->ISR & (0X1<<6))){}
}
//发送字符串
void hal_put_string(const char *string){//判断发送数据寄存器是否为空while(*string){//将数据写入寄存器中hal_put_char(*string++);}
}
//接收字符
char hal_get_char(){//判断接收数据是否为空char c=0;while(!(USART4->ISR & (0X1<<5))){}c=USART4->RDR;return c;
}
// 接收字符串
char* hal_get_string(){static char str[128]; // 使用静态变量以保持内容int i = 0;for(i = 0; i < 127; i++){ // 确保有空间存放'\0'str[i] = hal_get_char();if(str[i] == '\n' || str[i]=='\r'){ // 也考虑回车作为结束符break;}}str[i] = '\0'; // 确保字符串以null结尾return str;
}
usart4.h
#ifndef __UART4_H__
#define __UART4_H__
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_rcc.h"
#include "stm32mp1xx_uart.h"
//rcc,gpio,uart,初始化
void hal_uart4_init();
//发送一个字符
void hal_put_char(const char str);
//发送一个字符串
void hal_put_string(const char *string);
//接收一个字符串
char hal_get_char();
//接收一个字符串
char *hal_get_string();#endif
相关文章:
0701_ARM5
练习:使用usart4 main.c #include "uart4.h"int main() {// 初始化 UART4hal_uart4_init();while (1) {// 发送一个字符串//hal_put_char( hal_get_char());hal_put_string(hal_get_string());}return 0; } usart4.c #include "uart4.h"//**…...
Python用户宝典:了解并实现遗传算法
遗传算法是一种基于自然选择的技术,用于解决复杂问题。由于问题很复杂,遗传算法(而不是其他方法)被用来得出解决问题的合理方案。本文介绍遗传算法的基础知识以及如何用Python来实现。 遗传算法的要素 适应度函数 适应度函数衡…...
如何使用深度学习进行实时目标检测:速度与精度的双重挑战
如何使用深度学习进行实时目标检测:速度与精度的双重挑战 目标检测作为计算机视觉领域的核心任务之一,其目的是在图像或视频中识别和定位感兴趣的对象。随着深度学习技术的发展,基于深度学习的目标检测算法在实时性、准确性方面取得了显著进…...
创新引领,构筑产业新高地
在数字经济的浪潮中,成都树莓集团以创新驱动为核心,通过整合行业资源、优化服务、培养数字产业人才等措施,致力于打造产业高地,推动地方经济的高质量发展。 一、创新驱动,引领产业发展 1、引入新技术、新模式…...
npm,yarn清楚缓存
1.运行以下命令来清理npm缓存: npm cache clean --force或者运行以下命令清理Yarn缓存: yarn cache clean2.删除 node_modules 和锁文件: 删除 node_modules 目录和 package-lock.json 或 yarn.lock 文件,然后重新安装依赖 rm …...
httpclient访问https请求报错处理
C#通过httpclient调用https请求时,报错 错误信息为:The remote certificate is invalid according to the validation procedure 该错误是由于使用httpclient访问不合法的https站点导致出现的异常。 处理代码如下 public static string HttpPostWithT…...
ffmpeg + opencv 把摄像头画面保存为mp4文件(Ubuntu24.04)
参考链接 ffmpeg opencv 把摄像头画面保存为mp4文件_ffmpeg转化摄像头mp4-CSDN博客 调试环境 Ubuntu24.04 ffmpeg 6.1.1 opencv 4.6 g 13.2.0 C源码 #include <iostream> #include <sys/time.h> #include <string>#ifdef __cplusplus extern "…...
Fastapi 项目第二天首次访问时数据库连接报错问题Can‘t connect to MySQL server
问题描述 Fastapi 项目使用 sqlalchemy 连接的mysql 数据库,每次第二天首次访问数据库相关操作,都会报错:sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (2003, “Can’t connect to MySQL server on ‘x.x.x.x’ ([Err…...
尚硅谷k8s 2
p54-56 k8s核心实战 service服务发现 Service:将一组 Pods 公开为网络服务的抽象方法。 #暴露Deploy,暴露deploy会出现在svc kubectl expose deployment my-dep --port8000 --target-port80#使用标签检索Pod kubectl get pod -l appmy-depapiVersion: v1 kind: Service metad…...
机器学习---线性回归
1、线性回归 例如:对于一个房子的价格,其影响因素有很多,例如房子的面积、房子的卧室数量、房子的卫生间数量等等都会影响房子的价格。这些影响因子不妨用 x i x_{i} xi表示,那么房价 y y y可以用如下公式表示: y …...
字符串去重、集合遍历 题目
题目 JAVA38 字符串去重描述输入描述:输出描述: 示例:分析:代码:大佬代码: JAVA39 集合遍历描述输入描述:输出描述: 示例:分析:代码: JAVA38 字符串去重 描述 从键盘获取…...
SQL窗口函数详解
详细说明在sql中窗口函数是什么,为什么需要窗口函数,有普通的聚合函数了那窗口函数的意义在哪,窗口函数的执行逻辑是什么,over中的字句是如何使用和理解的(是不是句句戳到你的痛点,哼哼~&#x…...
如何用Java写一个整理Java方法调用关系网络的程序
大家好,我是猿码叔叔,一位 Java 语言工作者,也是一位算法学习刚入门的小学生。很久没有为大家带来干货了。 最近遇到了一个问题,大致是这样的:如果给你一个 java 方法,如何找到有哪些菜单在使用。我的第一想…...
基于STM32设计的管道有害气体检测装置(ESP8266局域网)176
基于STM32设计的管道有害气体检测装置(176) 文章目录 一、前言1.1 项目介绍【1】项目功能介绍【2】项目硬件模块组成【3】ESP8266模块配置【4】上位机开发思路【5】项目模块划分【6】LCD显示屏界面布局【7】上位机界面布局1.2 项目功能需求1.3 项目开发背景1.4 开发工具的选择1…...
iCloud照片库全指南:云端存储与智能管理
iCloud照片库全指南:云端存储与智能管理 在数字化时代,照片和视频成为了我们生活中不可或缺的一部分。随着手机摄像头质量的提升,我们记录生活点滴的方式也越来越丰富。然而,这也带来了一个问题:如何有效管理和存储日…...
IDEA中使用Maven打包及碰到的问题
1. 项目打包 IDEA中,maven打包的方式有两种,分别是 install 和 package ,他们的区别如下: install 方式 install 打包时做了两件事,① 将项目打包成 jar 或者 war,打包结果存放在项目的 target 目录下。…...
TreeMap、HashMap 和 LinkedHashMap 的区别
TreeMap、HashMap 和 LinkedHashMap 的区别 1、HashMap2、LinkedHashMap3、TreeMap4、总结 💖The Begin💖点点关注,收藏不迷路💖 在 Java 中,TreeMap、HashMap 和 LinkedHashMap 是三种常用的集合类,它们在…...
【跟我学K8S】45天入门到熟练详细学习计划
目录 一、什么是K8S 核心功能 架构组件 使用场景 二、入门到熟练的学习计划 第一周:K8s基础和概念 第二周:核心对象和网络 第三周:进阶使用和管理 第四周:CI/CD集成和监控 第五周:实战模拟和案例分析 第六周…...
ubuntu下载Nginx
一、Nginx下载安装(Ubuntu系统) 1.nginx下载 sudo apt-get install nginx2.nginx启动 启动命令 sudo nginx重新编译(每次更改完nginx配置文件后运行): sudo nginx -s reload3.测试nginx是否启动成功 打开浏览器访问本机80端口…...
【区分vue2和vue3下的element UI Dialog 对话框组件,分别详细介绍属性,事件,方法如何使用,并举例】
在 Vue 2 和 Vue 3 中,Element UI(针对 Vue 2)和 Element Plus(针对 Vue 3)提供了 Dialog 对话框组件,用于在页面中显示模态对话框。这两个库中的 Dialog 组件在属性、事件和方法的使用上有所相似ÿ…...
【Nano Bana】谷歌风格智能手表UI界面
谷歌风格智能手表UI提示词(专业工程版设计/开发专用) 在嵌入式智能手表UI设计与开发过程中,符合行业规范且适配开发需求的提示词,是高效生成可用界面、对接GUI框架的关键。本文汇总了适配Nano Banana工具的谷歌风格智能手表UI提示…...
5款部署方案的开源UML工具:开发者与设计师的高效协作绘图平台
5款部署方案的开源UML工具:开发者与设计师的高效协作绘图平台 【免费下载链接】umlet Free UML Tool for Fast UML Diagrams 项目地址: https://gitcode.com/gh_mirrors/um/umlet 开源UML工具UMLet是一款专为高效绘图设计的跨平台解决方案,它通过…...
基于.NET 11 与C# 14的高性能安全客户端应用开发
基于.NET 11 与C# 14的高性能安全客户端应用开发 前言 在客户端应用开发领域,性能与安全始终是关键指标。随着.NET 11 和 C# 14 的推出,开发者拥有了更强大的工具来构建高性能且安全可靠的客户端应用。这些新技术不仅提升了应用的运行效率,还…...
从零到一:在本地CentOS环境完整部署yshop-drink扫码点餐系统的实战指南
1. 环境准备:从零搭建CentOS基础系统 第一次在本地部署yshop-drink扫码点餐系统时,我选择了CentOS 7.9作为基础环境。这个版本既稳定又兼容大多数现代软件包,特别适合作为生产环境使用。建议直接使用阿里云镜像站下载Minimal版本ISO文件&…...
TI AM64x设备树配置踩坑记:从pinctrl节点到SysConfig工具的避坑指南
TI AM64x设备树配置实战:从寄存器解读到SysConfig高效开发 第一次在AM64x平台上配置外设引脚时,我盯着设备树里那行AM64X_IOPAD(0x011c, PIN_OUTPUT, 7)发呆了半小时——这个神秘的十六进制数到底对应哪个物理引脚?最后的数字7又代表什么&…...
GitHub贡献统计性能优化终极指南:5个关键技巧提升Streak Stats响应速度
GitHub贡献统计性能优化终极指南:5个关键技巧提升Streak Stats响应速度 【免费下载链接】github-readme-streak-stats 🔥 Stay motivated and show off your contribution streak! 🌟 Display your total contributions, current streak, and…...
DeerFlow资源优化实践:控制Python执行环境内存占用方法
DeerFlow资源优化实践:控制Python执行环境内存占用方法 1. 认识DeerFlow:您的智能研究助手 DeerFlow是一个基于LangStack技术框架开发的深度研究开源项目,它就像是您的个人研究团队,能够帮您完成各种复杂的调研任务。这个工具整…...
手把手教你用Matlab/Simulink搭建VSG虚拟阻抗模型,搞定新能源并网振荡难题
新能源并网VSG虚拟阻抗控制实战:从Simulink建模到振荡抑制 电力电子工程师们正面临一个棘手难题——新能源并网系统中的宽频振荡。当构网型变流器(GFM)在强电网环境下运行时,次同步和超同步频段的负阻尼特性可能导致系统失稳。虚拟…...
你的舵机抖得厉害?可能是PWM信号配置错了!STM32定时器避坑指南(实测MG996R)
STM32舵机控制实战:从PWM原理到MG996R精准调参 引言 当你第一次尝试用STM32控制舵机时,可能会遇到这样的场景:按照教程配置好PWM参数,烧录程序后却发现舵机要么纹丝不动,要么疯狂抖动,甚至发出刺耳的噪音…...
Excel动态甘特图制作指南:利用条件格式实现进度可视化
1. 为什么需要动态甘特图 项目管理中最让人头疼的就是进度跟踪。传统的静态表格需要手动更新颜色标注,每次进度变化都得重新调整,费时费力还容易出错。我在带团队做软件版本迭代时,就经常遇到这样的困扰:明明任务进度已经更新了&a…...
