ARM day6

2.串口发送指令控制硬件工作

结果:

uart.h

#ifndef  __UART_H__
#define __UART_H__
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_rcc.h" 
#include "stm32mp1xx_uart.h"void myuart4_init();
void myputchar(char i);
char mygetchar();
char *mygets();
void myputs(char *s);
void all_led_init();
void led1_on();
void led2_on();
void led3_on();
void led1_off();
void led2_off();
void led3_off();int mystrcmp(char *ptr,char *str);
#endif

uart.c


#include "myuart.h"
char buf[100]={0};//串口数据初始化
void myuart4_init()
{//1.UART4和GPIOB\GPIOG的时钟使能RCC->MP_AHB4ENSETR |= (0x1<<1);//使能GPIOB时钟RCC->MP_AHB4ENSETR |= (0x1<<6);//使能GPIOG时钟RCC->MP_APB1ENSETR |= (0X1<<16);//使能UART4时钟//2.设置PB2和PG11的管脚复用GPIOB->MODER&= (~(0x3<<4));GPIOB->MODER|= (0x2<<4); //设置复用GPIOB->AFRL &= (~(0XF<<8));GPIOB->AFRL |= (0X8<<8);//设置uart4功能复用GPIOG->MODER&= (~(0x3<<22));GPIOG->MODER|= (0x2<<22); //设置复用GPIOG->AFRH &= (~(0XF<<12));GPIOG->AFRH |= (0X6<<12);//设置uart4功能复用//3.先去设置串口禁用,方便设置数据格式USART4->CR1 &= (~0X1);//4.设置8位数据位USART4->CR1 &=(~(0x1<<12));USART4->CR1 &=(~(0x1<<28));//5.设置没有奇偶校验USART4->CR1 &=(~(0x1<<10));//6.设置16倍采样    USART4->CR1 &=(~(0x1<<15));//7.设置1位停止位USART4->CR2 &=(~(0x3<<12));//8.设置1分频USART4->PRESC&=(~0xf);//9.设置波特率为115200bpsUSART4->BRR=0x22B;//10.发送器、接收器使能USART4->CR1|=(0X1<<3);USART4->CR1|=(0X1<<2);//11.串口使能USART4->CR1|=(0X1);}
//封装函数发送一个字符数据void myputchar(char i)
{//1.判断TDR寄存器是否为空,如果为空,向TDR寄存器写入数据while(((USART4->ISR)&(0x1<<7))==0);USART4->TDR=i;//2.阻塞等待数据传输完成,函数返回while(((USART4->ISR)&(0x1<<6))==0);}char mygetchar()
{//判断RDR寄存器是否有就绪的数据,如果有就读取,否则等待char a;while(((USART4->ISR)&(0x1<<5))==0);a=USART4->RDR;return a;
}void myputs(char *s)
{while(*s){myputchar(*s);s++;}myputchar('\n');//切换到下一行myputchar('\r');//切换到一行的开头
}char *mygets()
{unsigned int i=0;for(i=0;i<100;i++){buf[i]=mygetchar();myputchar(buf[i]);if(buf[i]=='\r')break;}buf[i]='\0';myputchar('\n');return buf;
}void all_led_init()
{//1.使能外设时钟
RCC->MP_AHB4ENSETR |= (0x3<<4);//2.设置PF10 PE10 PE8为输出输出GPIOE->MODER&= (~(0x3<<20));GPIOE->MODER|= (0x1<<20);GPIOF->MODER&= (~(0x3<<20));GPIOF->MODER|= (0x1<<20);
GPIOE->MODER &= (~(0x3<<16));
GPIOE->MODER|= (0x1<<16);//3.设置推挽输出
GPIOE->OTYPER &= (~(0x1<<10));
GPIOF->OTYPER &= (~(0x1<<10));GPIOE->OTYPER &= (~(0x1<<8));//4.设置输出速度为低速
GPIOE->OSPEEDR &= (~(0x3<<20));
GPIOF->OSPEEDR &= (~(0x3<<20));GPIOE->OSPEEDR &= (~(0x3<<16));
//5.设置无上拉下拉
GPIOE->PUPDR &= (~(0x3<<20));
GPIOF->PUPDR &= (~(0x3<<20));
GPIOE->PUPDR &= (~(0x3<<16));
}void led1_on()
{GPIOE->ODR |= (0x1<<10);}
void led2_on()
{
GPIOF->ODR |= (0x1<<10);}
void led3_on()
{GPIOE->ODR |= (0x1<<8);}void led1_off()
{
GPIOE->ODR&= (~(0x1<<10));}
void led2_off()
{GPIOF->ODR &= (~(0x1<<10));}
void led3_off()
{GPIOE->ODR &= (~(0x1<<8));}int mystrcmp(char *ptr,char *str)
{while(*ptr){if(*ptr!=*str)return -1;ptr++;str++;}return 0;
}

main.c

 #include "myuart.h"int main(){myuart4_init();all_led_init();char *buf;while(1){	myputchar('\n');myputchar('\r');buf=mygets();if(mystrcmp(buf,"led1_on")==0)led1_on();else if(mystrcmp(buf,"led1_off")==0)led1_off();else if(!mystrcmp(buf,"led2_on"))led2_on();	else	if(!mystrcmp(buf,"led2_off"))led2_off();else if(mystrcmp(buf,"led3_on")==0)led3_on();else if(mystrcmp(buf,"led3_off")==0)led3_off();}return 0;}

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

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

相关文章

C++ this指针

通常情况下&#xff0c;类的成员函数都只涉及一个对象&#xff0c;即调用它的对象。但有时候方法可能涉及到两个对象&#xff0c;在这种情况就需要使用到C的this指针。 class Stock { private: ... double total_val; ... public: double total() const {return total_val;} }…

【Linux】进程周边002之进程状态

&#x1f440;樊梓慕&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》 &#x1f31d;每一个不曾起舞的日子&#xff0c;都是对生命的辜负 目录 前言 1.什么是状态&#xff1f; …

Python中的魔力编程:掌握面向对象之道

Python中的面向对象编程 背景&#xff1a; ​ 最近在看一些代码的时候&#xff0c;对类中的一些内置方法不是很懂&#xff0c;因此出一篇文章来细说一下&#xff0c;希望大家看完后对Python中类有一个清楚的认识。 基础铺垫&#xff1a; ​ 面向对象的三个特点&#xff1a;…

深入探索 Spring Boot:简化开发,加速部署的全方位利器

目录 导言 1. 自动配置&#xff08;Auto-Configuration&#xff09; 2. 起步依赖&#xff08;Starter Dependencies&#xff09; 3. 嵌入式 Web 服务器 4. Actuator 5. 外部化配置 6. 简化的安全性配置 7. Spring Boot CLI 8. Spring Boot DevTools 导言 在当今软件开…

java基础之抽象的概念(全网最详细)

一.抽象的概念 如下图所示&#xff1a; 如上图所示&#xff0c;一个父类为图形&#xff0c;计算图形的面积方法&#xff0c;那么就会有疑问&#xff0c;计算哪个图形的面积呢&#xff1f;所以这个计算图形的面积方法就称为抽象方法&#xff1b; 二.抽象方法和抽象类的格式 …

3、Kafka 线上集群部署方案怎么做?

文章目录 1、操作系统的选择1.1、I/O 模型的使用1.2、数据网络传输效率1.3、社区支持度 2、磁盘的选择3、磁盘容量的规划3.1、举例思考本问题&#xff1a;3.2、计算一下&#xff1a;3.3、规划磁盘容量时你需要考虑下面这几个元素&#xff1a; 4、带宽规划4.1、计算 总结 1、操作…

电商淘宝爬虫API与淘宝官方开放平台API的区别以及如何选择适合自己的API接口

随着数字化时代的到来&#xff0c;数据已经成为企业竞争力的重要因素。为了获取数据&#xff0c;企业或个人常常需要使用API接口。常见的API接口包括爬虫API和官方开放平台API。本文将详细介绍这两种API接口的区别以及如何选择适合自己的API接口。 一、爬虫API与官方开放平台A…

如何使用GaussDB创建外表(FOREIGN TABLE)

目录 一、前言 二、创建外表的特点 二、GaussDB创建外表访问外部数据库表&#xff08;示例&#xff09; 1、创建外表 2、FAQ&#xff1a;CREATE USER MAPPING错误 三、GaussDB创建外表映射数据文件&#xff08;示例&#xff09; 1、创建数据文件 2、创建外表 3、FAQ&a…

C++基础知识

目录 前言&#xff1a; 命名空间 命名空间的定义 命名空间的使用 c输入与输出 缺省参数 函数重载 引用 引用的特性 常引用 引用的使用场景 引用做参数 引用做返回值 引用与指针的区别 内联函数 内联函数的特性 前言&#xff1a; C 语言是结构化和模块化的语言&…

谈谈MYSQL主从复制原理

目录 概述 要点binlog日志 主从复制过程 总结 概述 MySQL 主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点。 MySQL 默认采用异步复制方式。从节点不用一直访问主服务器来更新自己的数据&#xff0c;数据的更新可以在远程连接上进行&#xff0…

Volatility3内存取证工具安装及入门在Linux下的安装教程

1-1. Volatility3简介 Volatility 是一个完全开源的工具&#xff0c;用于从内存 (RAM) 样本中提取数字工件。支持Windows&#xff0c;Linux&#xff0c;MaC&#xff0c;Android等多类型操作系统系统的内存取证。 针对竞赛这块&#xff08;CTF、技能大赛等&#xff09;基本上都…

瑞萨RZ/G2L核心板Linux Log目录文件详解

为了排除系统问题&#xff0c;监控系统健康状况以及了解系统与应用程序的交互方式&#xff0c;我们需要了解各log文件的作用&#xff0c;以G2L中yocto文件系统为例&#xff0c;在系统/var/log/目录下会存放记录系统中各个部分的log文件作用如下&#xff1a; 1. 文件详情 下图…

Ubuntu系统部署Inis博客并使用内网穿透发布到公网随时随地远程访问

目录 前言 推荐 1. Inis博客网站搭建 1.1. Inis博客网站下载和安装 1.2 Inis博客网站测试 1.3 cpolar的安装和注册 2. 本地网页发布 2.1 Cpolar临时数据隧道 2.2 Cpolar稳定隧道&#xff08;云端设置&#xff09; 2.3.Cpolar稳定隧道&#xff08;本地设置&#xff09;…

鸿蒙原生应用/元服务开发-Stage模型能力接口(二)

ohos.app.ability.AbilityConstant (AbilityConstant)一、说明 AbilityConstant提供Ability相关的枚举&#xff0c;包括设置初次启动原因、上次退出原因、迁移结果、窗口类型等。本模块首批接口从API version 9开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口…

matlab 最小二乘拟合平面(拉格朗日乘子法)

目录 一、算法原理二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。博客长期更新,爬虫自重。 一、算法原理 设拟合出的平面方程为: a x + b y &#

机器视觉系统选型-条形光源分类及应用场景

标准面光源 从平坦发光面照射漫射光 机械零件尺寸测量电子元件、IC的外形检测边缘缺陷检测服装纺织、食品包装检测 中孔面光源 从相机的同轴方向照射漫射光 金属零件缺陷检测金属外壳检测大面积电子元件的字符识别 平行面光源 照射平行度较高的漫射光玻璃瓶直径测量螺钉牙轮…

Android studio 离线配置gradle

Gradle Distributions Gradle Distributions 查看gradle 文件夹下 gradle-wrapper.properties文件中的distributionUrl 版本号 然后在上边网站下载对应需要的gradle对应版本 下载后复制到 gradle wrapper文件下&#xff0c;同时修改 distributionUrl 指向本地文件 然后同步就…

迷你型洗衣机好用吗?口碑好的四款小型洗衣机推荐

随着人们的生活水平的提升&#xff0c;越来越多小伙伴来开始追求更高的生活水平&#xff0c;一些智能化的小家电就被发明出来&#xff0c;而且内衣洗衣机是其中一个。现在通过内衣裤感染到细菌真的是越来越多&#xff0c;所以我们对内衣裤的清洗频次会高于普通衣服&#xff0c;…

轻量封装WebGPU渲染系统示例<47>- 多种光源(源码)

当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/material/src/voxgpu/sample/MultiLightsShading.ts 当前示例运行效果: 此示例基于此渲染系统实现&#xff0c;当前示例TypeScript源码如下: export class MultiLightsShading {private mRscene…

STM32 DAC+串口

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、DAC是什么&#xff1f;二、STM32 DAC1.什么型号有DAC2. 简介3. 主要特点4. DAC框图5. DAC 电压范围和引脚 三、程序步骤总结 前言 提示&#xff1a;这里可…