2、蓝牙打印机点灯-GPIO输出控制

1、硬件

1.1、看原理图

初始状态位高电平.

需要驱动PA1输出高低电平控制PA1.

1.2、看手册

a、系统架构图

GPIOA在APB2总线上。

b、RCC使能

GPIOA在第2位。

c、GPIO寄存器配置

端口:PA1

模式:通用推挽输出模式 -- 输出0、1即可

速度:50M --- 芯片的最高频率是72M,输出高低电平的时候2M、10M、50M都可以。

2、软件

2.1、创建led.c和led.h文件

led.h

#ifndef _LED_H
#define _LED_H#include "stm32f10x.h"
#include "io_bit.h"#endif

led.c

#include "led.h"

2.2、将led.c加载到项目中

2.3、初始化灯操作

led.c

/********************************************************************
*  函数名:  void init_led(void);
*  功能描述: LED初始化
*  输入参数:无   
*  返回:     无      
*  其他:          
*  硬件连接: PA1   低电平亮,高电平灭
*********************************************************************/	
void init_led(void){// 使能2号引脚RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);// 初始化引脚GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_Pin = GPIO_Pin_1;// 推挽输出GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStruct);// 初始状态LED1 = 1;
}

led.h

#ifndef _LED_H
#define _LED_H#include "stm32f10x.h"
#include "io_bit.h"#define LED1 PAout(1)void init_led(void);#endif

2.4、添加延时模块

添加delay.h和delay.c

delay.c

/***********************************************************************************************
SysTick 控制及状态寄存器 (SysTick->CTRL)地址:0xE000_E010第0位:ENABLE,Systick 使能位  		 (0:关闭Systick功能;1:开启Systick功能)第1位:TICKINT,Systick 中断使能位    (0:关闭Systick中断;1:开启Systick中断)第2位:CLKSOURCE,Systick时钟源选择   (0:使用HCLK/8 作为Systick时钟;1:使用HCLK作为Systick时钟)第16位:CountFlag,Systick计数比较标志,如果在上次读取本寄存器后,SysTick 已经数到了0,则该位为1。如果读取该位,该位将自动清零
*************************************************************************************************/#include "stm32f10x.h"///
static u8  fac_us=0;//us延时倍乘数
static u16 fac_ms=0;//ms延时倍乘数/****************************************************************** 函 数 名:delay_init(u8 SYSCLK)**** 功    能:延时初始化,配置systick时钟**** 参    数:SYSCLK  系统时钟 MHz**** 返    回:**** 其    他:SysTick的时钟固定为HCLK时钟的1/8******** 编    写:信盈达  冯工**** 编写时间:2014-10-21 23:29:39 **** 最后修改: 
**************************************************************/
void init_delay(u8 SYSCLK)
{SysTick->CTRL&=0xfffffffb;//bit2清空,选择外部时钟  HCLK/8fac_us=SYSCLK/8;		    fac_ms=(u16)fac_us*1000;
}		/***************************************************************** 函 数 名:	delay_ms(u16 nms)*** 功    能:	延时n毫秒*** 参    数:	nms   需要延时的毫秒数*** 返    回:*** 其    他:	SysTick->LOAD为24位寄存器,所以,最大延时为:nms <= 0xffffff* 8/(SYSCLK*1000)SYSCLK单位为MHz,nms单位为ms对72M条件下,nms<=1864****** 编    写:信盈达  冯工*** 编写时间:2014-10-21 23:29:39 *** 最后修改: 
**************************************************************/
void delay_ms(u16 nms)
{	 		  	  SysTick->LOAD=(u32)nms*fac_ms;		//时间加载(SysTick->LOAD为24bit)SysTick->VAL =0x00;           		//清空计数器SysTick->CTRL=0x01;          		//开始倒数  while( !(SysTick->CTRL & (1<<16)) );//等待时间到达 SysTick->CTRL=0x00;       			//关闭计数器SysTick->VAL |=0X00;       			//清空计数器	  	    
} /***************************************************** 函 数 名:	delay_us(u16 nus)*** 功    能:	延时n微秒*** 参    数:	nus   需要延时的微秒数*** 返    回:*** 其    他:	SysTick->LOAD为24位寄存器,所以,最大延时为:nms <= 0xffffff* 8/SYSCLKSYSCLK单位为MHz,nus单位为us对72M条件下,nus<=1864135****** 编    写:	信盈达  冯工*** 编写时间:	2014-10-21 23:35:37*** 最后修改: 
**************************************************/
void delay_us(u32 nus)
{		SysTick->LOAD=(u32)nus*fac_us;		//时间加载(SysTick->LOAD为24bit)SysTick->VAL =0x00;           		//清空计数器SysTick->CTRL=0x01;          		//开始倒数  while( !(SysTick->CTRL & (1<<16)) );//等待时间到达 SysTick->CTRL=0x00;       			//关闭计数器SysTick->VAL |=0X00;       			//清空计数器	  	    
}

delay.h

#ifndef __DELAY_H
#define __DELAY_H#include "stm32f10x.h"void init_delay(u8 SYSCLK);
void delay_ms(u16 nms);
void delay_us(u32 nus);#endif

2.5、测试代码

main.c

功能:隔1s灯的状态在亮和灭之间切换。


#include "led.h"
#include "delay.h"int main()
{init_delay(72); // 全速72Minit_led();while(1){LED1 = 0;// 延迟delay_ms(1000);LED1 = 1;// 延迟delay_ms(1000);}}

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

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

相关文章

使用强化学习训练神经网络玩俄罗斯方块

一、说明 在 2024 年暑假假期期间&#xff0c;Tim学习并应用了Q-Learning &#xff08;一种强化学习形式&#xff09;来训练神经网络玩简化版的俄罗斯方块游戏。在本文中&#xff0c;我将详细介绍我是如何做到这一点的。我希望这对任何有兴趣将强化学习应用于新领域的人有所帮助…

基于springboot的网上商城购物系统

作者&#xff1a;学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等 文末获取“源码数据库万字文档PPT”&#xff0c;支持远程部署调试、运行安装。 目录 项目包含&#xff1a; 开发说明&#xff1a; 系统功能&#xff1a; 项目截图…

API架构风格的深度解析与选择策略:SOAP、REST、GraphQL与RPC

❃博主首页 &#xff1a; 「码到三十五」 &#xff0c;同名公众号 :「码到三十五」&#xff0c;wx号 : 「liwu0213」 ☠博主专栏 &#xff1a; <mysql高手> <elasticsearch高手> <源码解读> <java核心> <面试攻关> ♝博主的话 &#xff1a…

【网络协议】开放式最短路径优先协议OSPF详解(四)

前言 在本章的第一部分和第二部分中&#xff0c;我们探讨了OSPF的基本配置&#xff0c;并进一步学习了更多OSPF的概念&#xff0c;例如静态路由的重分发及其度量值。在第三部分中&#xff0c;我们讨论了多区域OSPF。在第四部分中&#xff0c;我们将关注OSPF与多访问网络&#…

上门按摩系统架构与功能分析

一、系统架构 服务端&#xff1a;Java&#xff08;最低JDK1.8&#xff0c;支持JDK11以及JDK17&#xff09;数据库&#xff1a;MySQL数据库&#xff08;标配5.7版本&#xff0c;支持MySQL8&#xff09;ORM框架&#xff1a;Mybatis&#xff08;集成通用tk-mapper&#xff0c;支持…

攻防世界 ics-07

点击之后发现有个项目管理能进&#xff0c;点进去&#xff0c;点击看到源码&#xff0c;如下三段 <?php session_start(); if (!isset($_GET[page])) { show_source(__FILE__); die(); } if (isset($_GET[page]) && $_GET[page] ! index.php) { include(flag.php);…

Spring Boot教程之四十九:Spring Boot – MongoRepository 示例

Spring Boot – MongoRepository 示例 Spring Boot 建立在 Spring 之上&#xff0c;包含 Spring 的所有功能。由于其快速的生产就绪环境&#xff0c;使开发人员能够直接专注于逻辑&#xff0c;而不必费力配置和设置&#xff0c;因此如今它正成为开发人员的最爱。Spring Boot 是…

测试ip端口-telnet开启与使用

前言 开发过程中我们总会要去测试ip通不通&#xff0c;或者ip下某个端口是否可以联通&#xff0c;为此我们可以使用telnet 命令来实现。 一、telnet 开启 可能有些人使用telnet报错&#xff0c;不是内部命令&#xff0c;可以如下开启&#xff1a; 1、打开控制面板&#xff…

SpringBoot3动态切换数据源

背景 随着公司业务战略的发展&#xff0c;相关的软件服务也逐步的向多元化转变&#xff0c;之前是单纯的拿项目&#xff0c;赚人工钱&#xff0c;现在开始向产品化\服务化转变。最近雷袭又接到一项新的挑战&#xff1a;了解SAAS模型&#xff0c;考虑怎么将公司的产品转换成多租…

爬虫学习记录

1.概念 通过编写程序,模拟浏览器上网,然后让其去互联网上抓取数据的过程 通用爬虫:抓取的是一整张页面数据聚焦爬虫:抓取的是页面中的特定局部内容增量式爬虫:监测网站中数据更新的情况,只会抓取网站中最新更新出来的数据 robots.txt协议: 君子协议,网站后面添加robotx.txt…

通过 route 或 ip route 管理Linux主机路由

目录 一&#xff1a;route 使用说明1、查看路由信息2、删除指定路由3、增加指定路由 二&#xff1a;ip route 使用说明1、查看主机路由2、新增主机路由3、删除主机路由 通过route 或者ip route修改Linux主机路由后属于临时生效&#xff0c;系统重启后就恢复默认值了&#xff0c…

el-table表格合并某一列

需求&#xff1a;按照下图完成单元格合并&#xff0c;数据展示 可以看到科室列是需要合并的 并加背景色展示&#xff1b;具体代码如下&#xff1a; <el-tableref"tableA":data"tableDataList":header-cell-style"{ backgroundColor: #f2dcdb, col…

CSS Grid 布局全攻略:从基础到进阶

文章目录 一.Grid 是什么二.示例代码1. 基础使用 - 固定宽高2.百分百宽高3.重复设置-repeat4.单位-fr5.自适应6.间距定义其他 一.Grid 是什么 CSS 中 Grid 是一种强大的布局方式&#xff0c;它可以同时处理行和列 Grid 和Flex有一些类似&#xff0c;都是由父元素包裹子元素使用…

数据结构:包装类和泛型

目录 一、包装类 1、基本数据类型和对应的包装类 2、装箱和拆箱 3、自动装箱和自动拆箱 二、泛型 1、什么是泛型 2、泛型语法 3、泛型类 4、擦除机制 5、泛型的上界 6、泛型方法 三、通配符 1、什么是通配符 2、通配符上界 3、通配符下界 &#x1f4da…

备考蓝桥杯:顺序表相关算法题

目录 询问学号 寄包柜 移动0 颜色分类 合并两个有序数组 物品移动 询问学号 我们的思路&#xff1a;创建一个顺序表存储从1开始依次存放进入教室的学生学号&#xff0c;然后查询 #include <iostream> #include <vector> using namespace std; const int N 2…

Python入门教程 —— 网络编程

1.网络通信概念 简单来说,网络是用物理链路将各个孤立的工作站或主机相连在一起,组成数据链路,从而达到资源共享和通信的目的。 使用网络的目的,就是为了联通多方然后进行通信,即把数据从一方传递给另外一方。 前面的学习编写的程序都是单机的,即不能和其他电脑上的程…

C#异步多线程——ThreadPool线程池

C#实现异步多线程的方式有多种&#xff0c;以下总结的是ThreadPool的用法。 线程池的特点 线程池受CLR管理&#xff0c;线程的生命周期&#xff0c;任务调度等细节都不需要我们操心了&#xff0c;我们只需要专注于任务实现&#xff0c;使用ThreadPool提供的静态方法把我们的任…

68.基于SpringBoot + Vue实现的前后端分离-心灵治愈交流平台系统(项目 + 论文PPT)

项目介绍 本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论述心灵治愈交流平台的当前背景以及系统开发的目的&#xff0c;后续章节将严格按照软件开发流程&#xff0c;对系统进…

Linux(上):基本知识篇

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、Linux初识1 Linux简介2 Linux学习环境配置(1)安装Linux(2)FinalShell远程连接Linux服务器二、Linux基础命令1 Linux目录结构,根目录 /2 Linux命令基础(1)什么是命令、命令行?(2)…

Python中的可变对象与不可变对象;Python中的六大标准数据类型哪些属于可变对象,哪些属于不可变对象

Python中的可变对象与不可变对象&#xff1b;Python中的六大标准数据类型哪些属于可变对象&#xff0c;哪些属于不可变对象 Python中的可变对象与不可变对象一、Python的六大标准数据类型1. 数字类型 (Number)2. 字符串 (String)3. 列表 (List)4. 元组 (Tuple)5. 集合 (Set)6. …