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/8
	
	fac_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/SYSCLK
				SYSCLK单位为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); // 全速72M
	init_led();
	
	
	while(1)
	{
		LED1 = 0;
		
		// 延迟
		delay_ms(1000);
		
		LED1 = 1;
		
		
		// 延迟
		delay_ms(1000);
	
	}
	
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

WPS表格技巧01-项目管理中的基本功能-计划和每日记录的对应

前言&#xff1a; 在项目管理中&#xff0c;一般就是用些项目管理工具来管理这个任务和 task&#xff0c;但是就是要学这些工具很麻烦&#xff0c;比较好的方法&#xff0c;通用的方法就是用 Excel 表格去做&#xff08;这非常适合松散的团队组织&#xff09;&#xff0c;然后…

Vue 项目中实现打印功能:基于目标 ID 的便捷打印方案

一、引言 在 Vue 项目开发中&#xff0c;实现打印功能是一个常见的需求。本文将介绍如何封装一个打印方法&#xff0c;使得用户只需传入需要打印的目标 ID 名称&#xff0c;即可轻松实现预览并打印的功能。这种方法不仅简单易用&#xff0c;还具有一定的通用性&#xff0c;适合…

ARM 汇编基础总结

GNU 汇编语法 编写汇编的过程中&#xff0c;其指令、寄存器名等可以全部使用大写&#xff0c;也可以全部使用小写&#xff0c;但是不能大小写混用。 1. 汇编语句的格式 label: instruction comment label即标号&#xff0c;表示地址位置&#xff0c;有些指令前面可能会有标…

《塑战核心》V1.0.0.9952官方中文版

体验打击感满分的近距离战斗。击败蜂拥而至的敌人&#xff0c;每次击杀都会让你变得更强。 《塑战核心》官方中文版https://pan.xunlei.com/s/VODW7effpagQN1JU0UpBQQ5uA1?pwdmr8g#

综合练习dfs_1

1863. 找出所有子集的异或总和再求和 之前我们就做了到关于找集合子集的问题&#xff0c;但我们不需要记录路径上的数&#xff0c;求路径上数的异或和就可以。 class Solution {int path;int sum0; public:int subsetXORSum(vector<int>& nums) {dfs(nums,0);return …

【Python学习(五)——条件判断】

Python学习&#xff08;五&#xff09;——条件判断 本文介绍了条件判断&#xff0c;仅作为本人学习时记录&#xff0c;感兴趣的初学者可以一起看看&#xff0c;欢迎评论区讨论&#xff0c;一起加油鸭~~~ 心中默念&#xff1a;Python 简单好学&#xff01;&#xff01;&#x…

PPT加页码并改格式

如何快捷插入自定义 1、插入文本框&#xff0c;并处于输入状态 2、点击插入幻灯片编号的图标&#xff0c;就自动生成页码了 3、然后调整这个页码为想要的格式&#xff0c;到需要加页码的页面&#xff0c;将文本框复制过去就行了

Git 入门(一)

git 工作流如下&#xff1a; 命令如下&#xff1a; clone&#xff08;克隆&#xff09;: 从远程仓库中克隆代码到本地仓库checkout &#xff08;检出&#xff09;:从本地仓库中检出一个仓库分支然后进行修订add&#xff08;添加&#xff09;: 在提交前先将代码提交到暂存区com…

windows远程桌面无法连接,报错:“由于没有远程桌面授权服务器可以提供许可证,远程会话被中断。请跟服务器管理员联系”

windows远程桌面无法连接&#xff0c;报错&#xff1a;“由于没有远程桌面授权服务器可以提供许可证&#xff0c;远程会话被中断。请跟服务器管理员联系” 问题描述&#xff1a;解决方法&#xff1a;无法删除条目解决如下&#xff1a;正常激活详见&#xff1a;[RDS远程服务激活…

【JVM】总结篇-类的加载篇之 类的加载器 和ClassLoader分析

文章目录 类的加载器ClassLoader自定义类加载器双亲委派机制概念源码分析优势劣势如何打破Tomcat 沙箱安全机制JDK9 双亲委派机制变化 类的加载器 获得当前类的ClassLoader clazz.getClassLoader() 获得当前线程上下文的ClassLoader Thread.currentThread().getContextClassLoa…

蓝色简洁引导页网站源码

一款蓝色的简洁引导页&#xff0c;适合资源分发和网站备用引导。 1.源码上传至虚拟机或者服务器 2.绑定域名和目录 3.访问域名安装 4.安装完成后就行了 https://pan.quark.cn/s/b2d8b9c5dc7f https://pan.baidu.com/s/17h1bssUNhhR9DMyNTc-i9Q?pwd84sf https://caiyun.139.com…

Linux驱动开发(18):linux驱动并发与竞态

并发是指多个执行单元同时、并行执行&#xff0c;而并发的执行单元对共享资源(硬件资源和软件上的全局变量、静态变量等)的访问 则很容易导致竞态。对于多核系统&#xff0c;很容易理解&#xff0c;由于多个CPU同时执行&#xff0c;多个CPU同时读、写共享资源时很容易造成竞态。…

docker中使用Volume完成数据共享

情景概述 在一个docker中&#xff0c;部署两个MySQL容器&#xff0c;假如它们的数据都存储在自己容器内部的data目录中。这样的存储方式会有以下问题&#xff1a; 1.无法保证两个MySQL容器中的数据同步。 2.容器删除后&#xff0c;数据就会丢失。 基于以上问题&#xff0c;容…

django StreamingHttpResponse fetchEventSource实现前后端流试返回数据并接收数据的完整详细过程

django后端环境介绍&#xff1a; Python 3.10.14 pip install django-cors-headers4.4.0 Django5.0.6 django-cors-headers4.4.0 djangorestframework3.15.2 -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple 总环境如下&#xff1a; Package Version -…

R机器学习:神经网络算法的理解与实操,实例解析

神经网络算法是一种模仿生物神经网络&#xff08;尤其是人脑&#xff09;结构和功能的算法。它由大量相互连接的节点&#xff08;称为神经元&#xff09;组成&#xff0c;这些神经元组织成层&#xff0c;通过传递信号来处理信息。神经网络算法在机器学习、人工智能等领域中扮演…

供应链系统设计-供应链中台系统设计(七)- 商品中心设计篇

概述 上篇文章我们大致讲了一些商品中心相关的概念&#xff0c;例如&#xff1a;SPU、SKU、Item等等&#xff0c;在这里我们来简单的回顾一下&#xff1a; 商品概念的分层与定义&#xff1a; SPU&#xff08;Standard Product Unit&#xff09;&#xff1a;代表产品系列或产品…

人工智能在SEO中的应用与关键词优化策略

内容概要 随着科技的迅猛发展&#xff0c;人工智能在搜索引擎优化&#xff08;SEO&#xff09;中的应用逐渐成为业界关注的热点。AI技术不仅可以有效提高关键词的优化策略&#xff0c;还能在提升内容效率、增强用户体验方面发挥重要作用。通过对相关技术的深入探讨&#xff0c…

EPS32基础篇开发

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 开发 EPS32基础篇 前言一、GPIO输入输出GPIO可设置一下4种状态代码示例&#xff1a;检测按键&#xff0c;按下时&#xff1a;LED亮&#xff0c;松开时&#xff0c;LED灭 二、…

Backend - C# 的日志 NLog日志

目录 一、注入依赖和使用 logger 二、配置记录文件 1.安装插件 NLog 2.创建 nlog.config 配置文件 3. Programs配置日志信息 4. 设置 appsettings.json 的 LogLevel 5. 日志设定文件和日志级别的优先级 &#xff08;1&#xff09;常见的日志级别优先级 &#xff08;2&…

【游戏设计原理】47 - 超游戏思维

对于这条原理&#xff0c;我首先想到的是开放世界&#xff0c;或者探索性游戏&#xff0c;这是最能包容各类玩家的游戏类型。这类游戏定义了基本规则&#xff0c;玩家的可操作性很强。就像上图里的沙池一样&#xff0c;里面有滑梯&#xff0c;是规则性比较明确的&#xff0c;而…