嵌入式学习-ARM

嵌入式学习-ARM

STM32串口控制三盏灯亮灭

MAIN.C

#include "uart4.h"
int main()
{uart4_init();gpio_init();char str[32];while (1){gets(str);if (my_strcmp(str,"A") == 0){led1();}else if (my_strcmp(str,"B") == 0){led2();}else if (my_strcmp(str,"C") == 0){led3();}puts(str);}return 0;
}

UART4.C

#include "uart4.h"void uart4_init()
{// 使能GPIOB GPIOP UART4RCC->MP_AHB4ENSETR |= (0x1);RCC->MP_AHB4ENSETR |= (0x1 << 6);RCC->MP_APB1ENSETR |= (0x1 << 16);// 设置PB2和PG11管脚复用GPIOB->MODER &= (~(0X3 << 4));GPIOB->MODER |= (0X1 << 5);GPIOG->MODER &= (~(0X3 << 22));GPIOG->MODER |= (0X1 << 23);GPIOB->AFRL &= (~(0XF << 8));GPIOB->AFRL |= (0X8 << 8);GPIOG->AFRH &= (~(0XF << 12));GPIOG->AFRH |= (0X6 << 12);// 设置串口不使能 UE=0USART4->CR1 &= (~(0X1));// 设置8位数据位USART4->CR1 &= (~(0X1 << 12));USART4->CR1 &= (~(0X1 << 28));// 设置没有奇偶校验位USART4->CR1 &= (~(0X1 << 10));// 设置1位停止位USART4->CR2 &= (~(0X3 << 12));// 设置16倍过采样USART4->CR1 &= (~(0X1 << 15));// 设置时钟不分频USART4->PRESC &= (~(0XF));// 设置波特率115200USART4->BRR &= (~(0XF));USART4->BRR |= (0X22b);// 使能发送器USART4->CR1 |= (0X1 << 3);// 使能接收器USART4->CR1 |= (0X1 << 2);// 使能uart4USART4->CR1 |= (0X1);
}void gpio_init()
{// GPIOE GPIOF时钟使能RCC->MP_AHB4ENSETR |= (0X3 << 4);// PE10 PF10 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);// 设置为推挽输出GPIOE->OTYPER &= (~(0X1 << 10));GPIOF->OTYPER &= (~(0X1 << 10));GPIOE->OTYPER &= (~(0X1 << 8));// 设置为低速输出GPIOE->OSPEEDR &= (~(0X3 << 20));GPIOF->OSPEEDR &= (~(0X3 << 20));GPIOE->OSPEEDR &= (~(0X3 << 16));// 设置为无上拉电阻GPIOE->PUPDR &= (~(0X3 << 20));GPIOF->PUPDR &= (~(0X3 << 20));GPIOE->PUPDR &= (~(0X3 << 16));// 默认低电平GPIOE->ODR &= (~(0X1 << 10));GPIOF->ODR &= (~(0X1 << 10));GPIOE->ODR &= (~(0X1 << 8));//GPIOE->ODR |= ((0X1 << 10));//GPIOF->ODR |= ((0X1 << 10));//GPIOE->ODR |= ((0X1 << 8));
}// 输出字符
void putchar(char a)
{// 先判断发送数据寄存器是否为空// 不为空阻塞等待// 为空向发送数据寄存器写入a的数据// 写入完成需要判断发送是否完成,不完成阻塞等待,完成了则函数结束while (!(USART4->ISR & (0X1 << 7)));USART4->TDR = a;while (!(USART4->ISR & (0X1 << 6)));
}// 获取字符
char getchar()
{// 先判断接收数据寄存器种有没有准备好的数据// 如果数据没有准备好则阻塞等到// 如果数据准备好了则读取// 读取完毕将读取到的数据返回while (!(USART4->ISR & (0X1 << 5))) // 等待数据;return USART4->RDR;
}// 获取字符串
void gets(char *str)
{while (1){*str = getchar();putchar(*str);    // 显示输入的字符if (*str == '\r') // 回车退出break;str++;}*str = '\0';putchar('\n'); // 换行
}// 输出字符串
void puts(char *s)
{while (*s){putchar(*s);s++;}putchar('\r');putchar('\n');
}void led1()
{if (GPIOE->ODR & (0X1 << 10)) // 此时是亮 改为暗GPIOE->ODR &= (~(0X1 << 10));else GPIOE->ODR |= (0X1 << 10);
}
void led2()
{if (GPIOF->ODR & (0X1 << 10)) // 此时是亮 改为暗GPIOF->ODR &= (~(0X1 << 10));else GPIOF->ODR |= (0X1 << 10);
}
void led3()
{if (GPIOE->ODR & (0X1 << 8)) // 此时是亮 改为暗GPIOE->ODR &= (~(0X1 << 8));else GPIOE->ODR |= (0X1 << 8);
}int my_strcmp(const char *src, const char *dest)
{while (*src == *dest){if (*dest == '\0')break;src++;dest++;}return *src - *dest;
}

UART4.H

#ifndef __UART4_H__
#define __UART4_H__#include "stm32mp1xx_uart.h"
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_rcc.H"void uart4_init();
void gpio_init();
void putchar(char a);
char getchar();
void puts(char *s);
void gets(char *str);
void led1();
void led2();
void led3();
int my_strcmp(const char *src, const char *dest);#endif

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

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

相关文章

用大语言模型控制交通信号灯,有效缓解拥堵!

城市交通拥堵是一个全球性的问题&#xff0c;在众多缓解交通拥堵的策略中&#xff0c;提高路口交通信号控制的效率至关重要。传统的基于规则的交通信号控制&#xff08;TSC&#xff09;方法&#xff0c;由于其静态的、基于规则的算法&#xff0c;无法完全适应城市交通不断变化的…

Tabulator-tables5.6版本升级6.0版本

npm install tabulator-table 报错内容 /node_modules/tabulator-tables/dist/js/tabulator_esm.js 658:19 Module parse failed: Unexpected token (658:19) You may need an appropriate loader to handle this file type, currently no loaders are configured to process…

Tensorflow2.0笔记 - 链式法则例子

本笔记简单记录链式法则的原理&#xff0c;关于链式法则&#xff0c;本身和高等数学中的链式求导法则是一样的&#xff0c;深度学习中相关资料可以参考这里&#xff1a; 【深度学习之美22】BP算法详解之链式法则 - 知乎10.5 什么是计算图&#xff1f;我们知道&#xff0c; 神经…

Windows环境下编译ffmpeg 6.1源码--Virtual Studio + Msys2方式

环境准备 约定&#xff1a;源码全部放到sources下&#xff0c;目录结构说明 /d/java/ffmpeg #工程工目录 ├── build #存放编译文件的目录&#xff0c;子目录为具体模块的构建目录 │ ├── fdk-aac │ ├── ffmpeg │ └── x264 ├── instal…

机器学习流程—AutoML

文章目录 机器学习流程—AutoMLAutoML工具Auto-SKLearnMLBoxTPOTRapidMinerPyCaretAuto-KerasH2OAutoML谷歌AutoML云Uber LudwigTransmogrifAIAutoGluonAutoWekaDataRobot

稀碎从零算法笔记Day24-LeetCode:存在重复元素

前言&#xff1a;本打算练习下机写快排&#xff0c;但是快排超时了(为什么sort没超时啊。。) 题型&#xff1a;排序、哈希表 链接&#xff1a;存在重复元素 - 提交记录 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 题目描述 题目样例 题目思路 C代…

提升水库大坝安全与效率:现代技术云平台的应用

在我国&#xff0c;水库大坝的数量居世界之首&#xff0c;它们在推动国民经济发展中扮演着不可或缺的角色。然而&#xff0c;要想让这些水利工程充分发挥其价值&#xff0c;不仅需要精准的调度与高效的管理&#xff0c;更重要的是要确保其安全无虞。一旦发生事故&#xff0c;后…

linux 使用 go 连接 etcd 集群时报错

问题分析 在 ubuntu 中使用 github.com/coreos/etcd/clientv3 第三方库报错&#xff0c;报错信息如下&#xff1a; # github.com/coreos/etcd/clientv3/balancer/resolver/endpoint /root/go/pkg/mod/github.com/coreos/etcdv3.3.27incompatible/clientv3/balancer/resolver/…

鸿蒙Harmony应用开发—ArkTS-全局UI方法(列表选择弹窗)

列表弹窗。 说明&#xff1a; 从API Version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 本模块功能依赖UI的执行上下文&#xff0c;不可在UI上下文不明确的地方使用&#xff0c;参见UIContext说明。 从API version 10开始&#xff0…

HTML世界之标签Ⅵ

目录 一、progress 标签 二、q 标签 三、rp 标签 rt 标签 ruby 标签 四、s 标签 五、samp 标签 六、script 标签 七、section 标签 八、select 标签 九、small 标签 一、progress 标签 <progress> 标签定义运行中的任务进度&#xff08;进程&#xff09;。 …

数据结构——循环队列的实现

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…

【回顾练习】静态路由配置综合实验报告

一、分析要求 为R6设备配置公有IP地址&#xff0c;并确保只能进行IP地址配置&#xff0c;无法进行其他配置。为R1-R5设备分配私有IP地址。为R1、R2、R4配置两个环回地址&#xff0c;为R5、R6配置一个环回地址。在R3上配置DHCP服务&#xff0c;以供两台PC自动获取IP地址。使用动…

数字电源浅析

电力电子技术是关于能量转换、调节、控制和管理等方面的学科,而数字电源则是电力电子技术的一种应用,是利用数字电路技术实现电源控制和管理的新型电源。 一、什么是数字电源 数字电源是一种数字控制的电源设备,可以通过数字控制芯片(DSP、MCU等)实现输出电压、电流、功…

向上生长

&#xff08;1&#xff09; 我记得2010年&#xff0c;在中国的苹果应用商店里&#xff0c;充斥的App还有很多&#xff1a;日历App、天气App、电池省电App、记事本App…。但这已经过去了2007-2008-2009三年&#xff0c;这些应用仍然很欢。 我有一个朋友算是中国最早一批开发iOS …

Transformer 论文阅读笔记

文章目录 前言论文阅读研究现状工作内容模型架构训练过程实验结果模型代码 其他评价 前言 Transformer可以说是深度学习领域最重要的&#xff0c;里程碑式的工作之一&#xff0c;发表于2017年的NIPS。该模型开创了自MLP&#xff08;多层感知机&#xff09;、CNN&#xff08;卷…

U盘插入电脑没有显示怎么办?

U盘可以备份/转移数据&#xff0c;还可以作为启动盘重装系统&#xff0c;但很多用户在使用u盘的时候&#xff0c;都遇到过这样的问题&#xff0c;就是u盘插入电脑没有反应&#xff0c;在电脑上找不到u盘设备。那么今天就跟大家等下U盘插入电脑没有显示怎么办。 原因/解决方法一…

html5cssjs代码 036 CSS默认值

html5&css&js代码 036 CSS默认值 一、代码二、解释 CSS默认值&#xff08;也称为浏览器默认样式&#xff09;是指当HTML元素没有应用任何外部CSS样式时&#xff0c;浏览器自动为这些元素赋予的一组基本样式。这些样式是由浏览器的默认样式表&#xff08;User Agent sty…

【最新测试函数】智能优化算法的CEC2022测试函数

(多种智能优化算法跑多次运行结果的最优值,平均值,标准差,最差值以及箱型图) 智能优化算法测试函数简介 智能优化算法测试函数是为了在优化算法研究和开发中测试算法性能的规范问题集合。这些测试函数模拟了真实世界优化问题的不同方面,包括局部最小值、最大值、全局最…

几种常用的用于视频读取、写入和处理的库和函数

在Python中&#xff0c;有几种常用的用于视频读取、写入和处理的库和函数。其中最流行的包括OpenCV、MoviePy和imageio。以下是这些包的简要介绍和示例用法&#xff1a; opencv OpenCV是一个广泛用于计算机视觉任务的开源库&#xff0c;它也可以用来处理视频。你可以使用cv2.…

关系型数据库mysql(3)索引

目录 一.索引的概念 二.索引的作用 三.创建索引的原则依据 四.索引的分类 五.索引的创建 5.1 普通索引 5.1.1 直接创建索引 5.1.2 修改表方式创建 5.1.3 创建表的时候指定索引 5.2 唯一索引 5.2.1 直接创建唯一索引 5.2.2 修改表方式创建 5.2.3 创建表的时候指…