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 点灯的三种操作方式(库函数、寄存器、位操作)相关推荐

  1. 计算字符串长度的三种方法(库函数 指针 )【详解】

    目录 求字符串长度的一般原理 方法一:strlen函数 函数原型 使用方法 方法二:指针+整数 方法三:指针-指针 总结: 求字符串长度的一般原理 求字符串长度简单来说就是计算一个字符串(字符数组)中 ...

  2. RenameTo的三种操作方式

    1.rename(在同一个目录下操作) package com_02; import java.io.File; public class RenameTo_Demo { public static  ...

  3. 汇编-子程序参数传递的三种方式-寄存器法,堆栈法,参数赋值法【详述后两者】

    汇编-子程序参数传递的三种方式: 寄存器法,堆栈法,参数赋值法 子程序结构如下: 名称 PROC FAR|NEAR;DO SOMETHINGRET [N];返回断点地址,N可忽略,加了必须对SP进行 ...

  4. 简单51单片机c语言编程流水灯,51单片机如何实现流水灯?51单片机实现流水灯的三种方法详细分析...

    描述 首先,介绍下原理.下图为主控芯片和流水灯模块的原理图.流水灯模块接在单片机的P1口,由原理图可以知道,在P1口给一个低电平即可点亮LED灯.相反,如果要LED灯熄灭,就要把P1口的电平变为高电平 ...

  5. 51单片机流水灯的三种实现方法

    首先,介绍下原理.下图为主控芯片和流水灯模块的原理图.流水灯模块接在单片机的P1口,由原理图可以知道,在P1口给一个低电平即可点亮LED灯.相反,如果要LED灯熄灭,就要把P1口的电平变为高电平即可. ...

  6. java 运行main_使用maven运行Java Main的三种方法解析

    maven使用exec插件运行java main方法,以下是3种不同的操作方式. 一.从命令行运行 1.运行前先编译代码,exec:java不会自动编译代码,你需要手动执行mvn compile来完成 ...

  7. 常用的分隔符有哪三种_Node.js系列四 - 常用的内置模块

    一. 内置模块path 1.1. 认识path模块 path模块用于对路径和文件进行处理,提供了很多好用的方法. 并且我们知道在Mac OS.Linux和window上的路径时不一样的 window上 ...

  8. 常用三种跨行转账方式的用户体验比较

    当今移动互联网的时代,在享受实体银行的转账服务外,人们越来越倾向于线上完成银行转账的操作,而支付宝转账和手机银行转账是最常用的两种线上转账方式,加上传统的银行ATM机转账,对于个人用户来说,这三种转账 ...

  9. java main 运行_使用maven运行Java Main的三种方法解析

    导读热词 maven使用exec插件运行java main方法,以下是3种不同的操作方式. 一.从命令行运行 1.运行前先编译代码,exec:java不会自动编译代码,你需要手动执行mvn compi ...

最新文章

  1. CAS机制中的ABA问题
  2. wxWidgets:wxMediaCtr类用法
  3. 组合CPU和DRAM
  4. 有一个包含主函数的java类_重新认识Java中的程序入口即主函数各组成部分
  5. cmd命令不识别exp_cmd 命令行exp 命令导出数据库文件
  6. 搭建LNMP基础框架
  7. mysql 查询 in memory_In-Memory整体汇总
  8. 计算机机房新风机管道布置要求,新风系统管道布置—新风系统管道布置连接方法介绍...
  9. Tomcat9版本不支持jsp处理PUT,DELETE之外的请求的解决方案(405方法不允许)
  10. Mycat分布式数据库架构解决方案--搭建MySQL读写分离环境--一主多从
  11. 51nod-1358:浮波那契
  12. 杭电算法题 HDU 1000-1004
  13. android中LayoutInflater详解与使用
  14. 云盘万能钥匙插件(无需输入网盘提取密码)
  15. win7怎么在计算机找文件夹选项,解决WIN7工具菜单没有文件夹选项/文件夹和搜索选项变灰色...
  16. 微信群二维码被动加了100人了还怎么扫码进入?
  17. Spark实践的阶段性总结
  18. windows10打开excel显示灰色的解决方案
  19. 【腾讯位置服务】使用地点云实现企业官网中的门店地图
  20. c语言链表正序输出,建立正序链表,该怎么处理

热门文章

  1. 【TensorFlow】——索引与切片
  2. C#中Console.ReadKey()与ConsoleKey的一些用法
  3. 将数组作为参数,调用该函数时候给的是数组地址还是整个数组
  4. java中主线程首先执行_java经典面试题:子线程先运行30次主线程,主线程40次,如此循环50次?...
  5. c++11中的智能指针
  6. java reference 传引用_Java的引用(reference)---Roni
  7. Pytorch 自定义激活函数前向与反向传播 sigmoid
  8. css多行超出时,超出高度,显示省略号
  9. 基于redis 内存数据库简单使用
  10. loadrunner性能测试步骤