写这篇笔记之前,已经学习了51单片机对Keil环境下单片机的开发有一定的了解(I2C,串口,PWM,红外等),学习32是为了准备蓝桥杯嵌入式组,以及更深入的理解嵌入式开发,也为未来做实体项目做准备。

STM32的环境搭建

KeilMDK,STM32F10X库函数文件,stm32f103最小系统版。(基于库函数开发)

GPIO输入输出

:输入:从IO口读取电平数据(读出输入数据寄存器),出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器 , 对输入数据寄存器的读访问可得到I/O状态

所用函数:GPIO_ReadInputDateBits(GPIOX,GPIO_Pin_X);GPIO_ReadInputDate(GPIOX);

也可读取从单片机输出的数据;GPIO_ReadOutputDate();GPIO_ReadOutputDateBits();

,输出:用单片机操作IO口(读出或者写入输出数据寄存器,读出输入数据寄存器),

所用函数:

GPIO_SetBits(GPIOX,GPIO_Pin_X),GPIO_ResetBits(GPIOX,GPIO_Pin_X)

四种输入模式:上拉输入,下拉输入,浮空输入,模拟输入;

四种输出模式:

推挽输出:对输出数据寄存器的读访问得到最后一次写的值

开漏输出:对输入数据寄存器的读访问可得到I/O状态

复用推挽输出

复用开漏输出

利用stm32所实现的功能:

按键控制LED亮灭

主函数部分

//主函数
#include "stm32f10x.h"
#include "LED.h"
#include "Delay.h"
#include "KEY.h"uint8_t Keynum=0;
int main(void){ LED_Init();while(1){Keynum=keynum();
//          if(Keynum==1)
//          {
//               LED1_turn();
//          }
//          if(Keynum==2)
//          {
//              LED2_turn();
//          }}
}

按键模块(GPIOB输入,读输入寄存器获取IO状态)

#include "stm32f10x.h" // Device header
#include "Delay.h"
void Key_Init(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE );GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPU;GPIO_InitStruct.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_11;GPIO_InitStruct.GPIO_Speed= GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitStruct);
}
uint8_t keynum(void)
{uint8_t KEYNUM=0;Key_Init();if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11)==0){Delay_ms(20);while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11)==0);Delay_ms(20);KEYNUM=1;}if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)==0){Delay_ms(20);while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)==0);Delay_ms(20);KEYNUM=2;}return KEYNUM;
}

LED模块

#include "stm32f10x.h"                  // Device header
void LED_Init(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE );GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStruct.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1;GPIO_InitStruct.GPIO_Speed= GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStruct);GPIO_SetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1);
}
void LED1_ON(void)
{GPIO_ResetBits(GPIOA,GPIO_Pin_0);}
void LED2_ON(void)
{GPIO_ResetBits(GPIOA,GPIO_Pin_1);}
void LED1_OFF(void)
{GPIO_SetBits(GPIOA,GPIO_Pin_0);}void LED2_OFF(void)
{GPIO_SetBits(GPIOA,GPIO_Pin_1);}
void LED1_turn(void)
{if(GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_0)==0){GPIO_SetBits(GPIOA,GPIO_Pin_0);}else{GPIO_ResetBits(GPIOA,GPIO_Pin_0);}}void LED2_turn(void)
{if(GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_1)==0){GPIO_SetBits(GPIOA,GPIO_Pin_1);}else{GPIO_ResetBits(GPIOA,GPIO_Pin_1);}}

光敏电阻间接触发蜂鸣器(强光响,弱光不响)

主函数

#include "stm32f10x.h"
#include "BUZZER.h"
#include "Delay.h"
#include "LightSensor.h"int main(void){   LightSensor_Init();Buzzer_Init();while(1){if(LightSensor_Get()==1){Buzzer_ON();}else{Buzzer_OFF();}}
}

蜂鸣器驱动:

#include "stm32f10x.h"                  // Device header
void Buzzer_Init(viod)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE );GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStruct.GPIO_Pin=GPIO_Pin_12;GPIO_InitStruct.GPIO_Speed= GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitStruct);GPIO_SetBits(GPIOB,GPIO_Pin_12);
}
void Buzzer_ON(void)
{GPIO_ResetBits(GPIOB,GPIO_Pin_12);}void Buzzer_OFF(void)
{GPIO_SetBits(GPIOB,GPIO_Pin_12);}void Buzzer_turn(void)
{if(GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_12)==0){GPIO_SetBits(GPIOB,GPIO_Pin_12);}else{GPIO_ResetBits(GPIOB,GPIO_Pin_12);}}

光敏电阻驱动

#include "stm32f10x.h"                  // Device header
void LightSensor_Init(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE );GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPU;GPIO_InitStruct.GPIO_Pin=GPIO_Pin_13;GPIO_InitStruct.GPIO_Speed= GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitStruct);}
uint8_t LightSensor_Get(void)
{return GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13);
}

学习结束!

stm32学习笔记1相关推荐

  1. stm32学习笔记----双串口同时打开时的printf()问题

    stm32学习笔记----双串口同时打开时的printf()问题 最近因为要使用串口2外接PN532芯片实现通信,另一方面,要使用串口1来将一些提示信息输出到上位机,于是重定义了printf(),使其 ...

  2. STM32学习笔记 | 引起电源和系统异常复位的原因

    关注+星标公众号,不错过精彩内容 每一块处理器都有复位的功能,不同处理器复位的类型可能有差异,引起复位的原因也可能有多种. STM32的复位功能非常强大,可通过软件.硬件和一些事件触发系统复位,而且通 ...

  3. 《STM32学习笔记》4——核心功能电路与编程(下)

    接上文,文中的图片,大多数来自视频的截图(来自洋桃电子). 欢迎大家批评指正! STM32学习笔记-专栏 文章目录 一.蜂鸣器驱动 1.蜂鸣器介绍 2.蜂鸣器电路 3.蜂鸣器程序 二. MIDI 音乐 ...

  4. 【STM32学习笔记-点亮LED灯】

    STM32学习笔记-点亮LED灯 文章目录 STM32学习笔记-点亮LED灯 一.原理图分析 二.代码分析 1.mian函数 2.led.c函数 3.led.h函数 4.函数文件整理 5.LED_In ...

  5. STM32学习笔记(四)丨TIM定时器及其应用(定时中断、内外时钟源选择)

    本篇文章包含的内容 一.TIM 定时器 1.1 TIM 定时器简介 1.2 TIM 定时器类型及其工作原理简介 1.2.1 基本定时器工作原理及其结构 1.2.2 通用定时器工作原理及其结构 1.2. ...

  6. STM32学习笔记(六)丨TIM定时器及其应用(输入捕获丨测量PWM波形的频率和占空比)

    本篇文章包含的内容 一.输入捕获 1.1 输入捕获简介 1.2 输入捕获通道的工作原理 1.3 输入捕获的主从触发模式 1.4 输入捕获和PWMI结构 二.频率的测量方法 2.1 测频法 2.2 测周 ...

  7. STM32学习笔记(15)——SPI协议

    STM32学习笔记(15)--SPI协议 一.SPI协议简介 1. 物理层 2. 协议层 (1) 通讯的开始与停止 (2)时钟极性CPOL.时钟相位CPHA 二.STM32的SPI外设 1. 通讯引脚 ...

  8. crh寄存器_牛人的STM32学习笔记(寄存器版本).doc

    牛人的STM32学习笔记(寄存器版本) 一.GPIO口的配置 STM32的DGPIO口最多可以有7组(GPIOa~GPIOg),而每一组GPIO口均有16个双向IO组成.并且没个IO口均可配置成8种模 ...

  9. STM32学习笔记(13)——模数转换ADC

    这个月一直忙于准备考试,已经考完一半科目了,偷闲写了这篇文章.因为还没考完试,估计还得咕一段时间了. STM32学习笔记(13)--模数转换ADC 第一部分:ADC功能框图 一.输入电压 二.输入通道 ...

  10. STM32学习笔记(八)丨ADC模数转换器(ADC单、双通道转换)

    本篇文章包含的内容 一.ADC 模数转换器 1.1 ADC简介 1.2 逐次逼近型ADC工作原理 1.3 STM32中的ADC基本结构 1.4 STM32中ADC的输入通道 1.5 STM32中的AD ...

最新文章

  1. 安卓入门系列-06常见布局之ConstraintLayout(约束布局)
  2. ux和ui_UI和UX设计师的10种软技能
  3. [学习笔记] 二分图基础定理的相关证明
  4. MySQL 第二次练习(源码安装、数据库和表的建立)
  5. java 实体类重写排序,对自定义对象进行排序(C++/Java) | 学步园
  6. PSP,CPS1街机模拟器终于出来了(CAPCOM CPS1 Emulators for the PSP),完美!
  7. ENVI FLAASH大气校正常见错误及解决方法
  8. linux的打开文件工具,xdg-open|从Liunx终端工具打开文件系统说起
  9. 第十三周作业-必做3
  10. linux文件安全与权限
  11. webstorm提示TypeError: this.cliEngine is not a constructor
  12. uniapp开发app真机调试连接电脑服务器请求失败解决方法
  13. 什么是微信群控系统,我来告诉你!
  14. Codeforces 91A-Newspaper Headline
  15. filepath直接指定到文件名吗_快速实现对文件按时间的重命名
  16. OpenShift 4 - 有关 Operator 相关概念和运维操作
  17. 没有密码如何卸载卡巴斯基?
  18. 地球兄弟版星球又出现了 Gliese 832 c系外行星
  19. 优思学院|关键路径方法CPM
  20. 圆弧插补程序c语言,用C语言写的简易的逐点比较法插补算法,包括直线逐点插补和圆弧插补...

热门文章

  1. oracle 退出代码 255,sql – 奇怪的SSIS错误(进程退出代码255)
  2. JAVA进阶之路-CountDownLatch源码走读
  3. 同样是食堂,为什么你却如此优秀!
  4. SpringSecurity详细介绍RememberMe功能
  5. 绝对精美的ios壁纸【收藏】
  6. 【LaTex写作】关于LaTex的所有名词及其解释
  7. java入门~第十六天 对象数组以及集合和相关数据结构
  8. 产品分析方法--PEST模型
  9. win7资源管理器从计算机开始,Win7系统资源管理器在哪里?
  10. iOS开发中那些容易被我们忽略的代码,常用代码集合