STM32F103ZET6 点灯的三种操作方式(库函数、寄存器、位操作)
LED硬件连接:
点灯的基本步骤:
库函数版本
重要函数:
main.c部分:
#include "stm32f10x.h"
#include "LED.h"
#include "delay.h"int main(void)
{LED_Init();//GPIOB、E初始化delay_init();//延时函数初始化while(1){GPIO_SetBits(GPIOB,GPIO_Pin_5);//GPIOB.5设置输出高电平GPIO_SetBits(GPIOE,GPIO_Pin_5);//GPIOE.5设置输出高电平delay_ms(300);GPIO_ResetBits(GPIOB,GPIO_Pin_5);//GPIOB.5设置输出低电平GPIO_ResetBits(GPIOE,GPIO_Pin_5);//GPIOE.5设置输出低电平delay_ms(300);}
}
LED.c部分:
#include "LED.h"
#include "stm32f10x.h"void LED_Init(void)
{GPIO_InitTypeDef GPIO_InitLed;//定义GPIO_InitTypeDef类型的结构体RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//时钟使能GPIOBRCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);//时钟使能GPIOEGPIO_InitLed.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitLed.GPIO_Pin=GPIO_Pin_5;GPIO_InitLed.GPIO_Speed=GPIO_Speed_50MHz;/*这三个是结构体内的成员,进行功能设置*/GPIO_Init(GPIOB,&GPIO_InitLed);//将定义好的结构体的地址(&GPIO_InitLed)写入GPIO_SetBits(GPIOB,GPIO_Pin_5);//设置GPIOB.5输出高电平GPIO_InitLed.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_Init(GPIOE,&GPIO_InitLed);//将定义好的结构体的地址(&GPIO_InitLed)写入GPIO_SetBits(GPIOE,GPIO_Pin_5);//设置输出GPIOE.5输出高电平
}
LED.h部分:
#ifndef _LED_H
#define _LED_Hvoid LED_Init(void);#endif
寄存器版本
这一部分主要参考芯片手册进行寄存器的配置。
main.c部分:
#include "led.h"
#include "stm32f10x.h"
#include "delay.h"int main(void)
{delay_init();LED_Init();while(1){GPIOB->ODR |=1<<5;//GPIOB.5输出高电平GPIOE->ODR |=1<<5;//GPIOE.5输出高电平delay_ms(300);GPIOB->ODR &=~(1<<5);//GPIOB.5输出低电平GPIOE->ODR &=~(1<<5);//GPIOE.5输出低电平delay_ms(300);}return 0;
}
led.c部分:
#include "led.h"
#include "stm32f10x.h"void LED_Init(void)
{RCC->APB2ENR |=1<<3;//使能时钟RCC->APB2ENR |=1<<6;//使能时钟GPIOB->CRL &=0xff0fffff;//GPIOB.5的四位清0GPIOB->CRL |=0x00300000;//GPIOB.5的四位赋值0011,设置为推挽输出模式GPIOB->ODR |=1<<5;//GPIOB.5输出高电平GPIOE->CRL &=0xff0fffff;//GPIOE.5的四位清0GPIOE->CRL |=0x00300000;//GPIOE.5的四位赋值0011,设置为推挽输出模式GPIOE->ODR |=1<<5;//输出高电平
}
led.h部分:
#ifndef _LED_H
#define _LED_Hvoid LED_Init(void);#endif
位操作版本
位操作原理:
那些区域支持位操作:
位带区与位带别名区的膨胀关系图:
位带操作优越性:
映射关系:
main.c部分:
#include "led.h"
#include "delay.h"
#include "stm32f10x.h"int main(void)
{LED_Init();delay_init();while(1){PBout(5)=1;//GPIOB.5输出高电平PEout(5)=1;//GPIOE.5输出高电平delay_ms(1000); PBout(5)=0;//GPIOB.5输出低电平PEout(5)=0;//GPIOE.5输出低电平delay_ms(1000);} return 0;
}
void LED_Init(void)
{GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_SetBits(GPIOB,GPIO_Pin_5); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPIO_Init(GPIOE, &GPIO_InitStructure); GPIO_SetBits(GPIOE,GPIO_Pin_5);
}
led.h部分:
#ifndef __LED_H
#define __LED_H
#include "sys.h"
void LED_Init(void);
#endif
STM32F103ZET6 点灯的三种操作方式(库函数、寄存器、位操作)相关推荐
- 计算字符串长度的三种方法(库函数 指针 )【详解】
目录 求字符串长度的一般原理 方法一:strlen函数 函数原型 使用方法 方法二:指针+整数 方法三:指针-指针 总结: 求字符串长度的一般原理 求字符串长度简单来说就是计算一个字符串(字符数组)中 ...
- RenameTo的三种操作方式
1.rename(在同一个目录下操作) package com_02; import java.io.File; public class RenameTo_Demo { public static ...
- 汇编-子程序参数传递的三种方式-寄存器法,堆栈法,参数赋值法【详述后两者】
汇编-子程序参数传递的三种方式: 寄存器法,堆栈法,参数赋值法 子程序结构如下: 名称 PROC FAR|NEAR;DO SOMETHINGRET [N];返回断点地址,N可忽略,加了必须对SP进行 ...
- 简单51单片机c语言编程流水灯,51单片机如何实现流水灯?51单片机实现流水灯的三种方法详细分析...
描述 首先,介绍下原理.下图为主控芯片和流水灯模块的原理图.流水灯模块接在单片机的P1口,由原理图可以知道,在P1口给一个低电平即可点亮LED灯.相反,如果要LED灯熄灭,就要把P1口的电平变为高电平 ...
- 51单片机流水灯的三种实现方法
首先,介绍下原理.下图为主控芯片和流水灯模块的原理图.流水灯模块接在单片机的P1口,由原理图可以知道,在P1口给一个低电平即可点亮LED灯.相反,如果要LED灯熄灭,就要把P1口的电平变为高电平即可. ...
- java 运行main_使用maven运行Java Main的三种方法解析
maven使用exec插件运行java main方法,以下是3种不同的操作方式. 一.从命令行运行 1.运行前先编译代码,exec:java不会自动编译代码,你需要手动执行mvn compile来完成 ...
- 常用的分隔符有哪三种_Node.js系列四 - 常用的内置模块
一. 内置模块path 1.1. 认识path模块 path模块用于对路径和文件进行处理,提供了很多好用的方法. 并且我们知道在Mac OS.Linux和window上的路径时不一样的 window上 ...
- 常用三种跨行转账方式的用户体验比较
当今移动互联网的时代,在享受实体银行的转账服务外,人们越来越倾向于线上完成银行转账的操作,而支付宝转账和手机银行转账是最常用的两种线上转账方式,加上传统的银行ATM机转账,对于个人用户来说,这三种转账 ...
- java main 运行_使用maven运行Java Main的三种方法解析
导读热词 maven使用exec插件运行java main方法,以下是3种不同的操作方式. 一.从命令行运行 1.运行前先编译代码,exec:java不会自动编译代码,你需要手动执行mvn compi ...
最新文章
- CAS机制中的ABA问题
- wxWidgets:wxMediaCtr类用法
- 组合CPU和DRAM
- 有一个包含主函数的java类_重新认识Java中的程序入口即主函数各组成部分
- cmd命令不识别exp_cmd 命令行exp 命令导出数据库文件
- 搭建LNMP基础框架
- mysql 查询 in memory_In-Memory整体汇总
- 计算机机房新风机管道布置要求,新风系统管道布置—新风系统管道布置连接方法介绍...
- Tomcat9版本不支持jsp处理PUT,DELETE之外的请求的解决方案(405方法不允许)
- Mycat分布式数据库架构解决方案--搭建MySQL读写分离环境--一主多从
- 51nod-1358:浮波那契
- 杭电算法题 HDU 1000-1004
- android中LayoutInflater详解与使用
- 云盘万能钥匙插件(无需输入网盘提取密码)
- win7怎么在计算机找文件夹选项,解决WIN7工具菜单没有文件夹选项/文件夹和搜索选项变灰色...
- 微信群二维码被动加了100人了还怎么扫码进入?
- Spark实践的阶段性总结
- windows10打开excel显示灰色的解决方案
- 【腾讯位置服务】使用地点云实现企业官网中的门店地图
- c语言链表正序输出,建立正序链表,该怎么处理
热门文章
- 【TensorFlow】——索引与切片
- C#中Console.ReadKey()与ConsoleKey的一些用法
- 将数组作为参数,调用该函数时候给的是数组地址还是整个数组
- java中主线程首先执行_java经典面试题:子线程先运行30次主线程,主线程40次,如此循环50次?...
- c++11中的智能指针
- java reference 传引用_Java的引用(reference)---Roni
- Pytorch 自定义激活函数前向与反向传播 sigmoid
- css多行超出时,超出高度,显示省略号
- 基于redis 内存数据库简单使用
- loadrunner性能测试步骤