stm32学习笔记1
写这篇笔记之前,已经学习了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相关推荐
- stm32学习笔记----双串口同时打开时的printf()问题
stm32学习笔记----双串口同时打开时的printf()问题 最近因为要使用串口2外接PN532芯片实现通信,另一方面,要使用串口1来将一些提示信息输出到上位机,于是重定义了printf(),使其 ...
- STM32学习笔记 | 引起电源和系统异常复位的原因
关注+星标公众号,不错过精彩内容 每一块处理器都有复位的功能,不同处理器复位的类型可能有差异,引起复位的原因也可能有多种. STM32的复位功能非常强大,可通过软件.硬件和一些事件触发系统复位,而且通 ...
- 《STM32学习笔记》4——核心功能电路与编程(下)
接上文,文中的图片,大多数来自视频的截图(来自洋桃电子). 欢迎大家批评指正! STM32学习笔记-专栏 文章目录 一.蜂鸣器驱动 1.蜂鸣器介绍 2.蜂鸣器电路 3.蜂鸣器程序 二. MIDI 音乐 ...
- 【STM32学习笔记-点亮LED灯】
STM32学习笔记-点亮LED灯 文章目录 STM32学习笔记-点亮LED灯 一.原理图分析 二.代码分析 1.mian函数 2.led.c函数 3.led.h函数 4.函数文件整理 5.LED_In ...
- STM32学习笔记(四)丨TIM定时器及其应用(定时中断、内外时钟源选择)
本篇文章包含的内容 一.TIM 定时器 1.1 TIM 定时器简介 1.2 TIM 定时器类型及其工作原理简介 1.2.1 基本定时器工作原理及其结构 1.2.2 通用定时器工作原理及其结构 1.2. ...
- STM32学习笔记(六)丨TIM定时器及其应用(输入捕获丨测量PWM波形的频率和占空比)
本篇文章包含的内容 一.输入捕获 1.1 输入捕获简介 1.2 输入捕获通道的工作原理 1.3 输入捕获的主从触发模式 1.4 输入捕获和PWMI结构 二.频率的测量方法 2.1 测频法 2.2 测周 ...
- STM32学习笔记(15)——SPI协议
STM32学习笔记(15)--SPI协议 一.SPI协议简介 1. 物理层 2. 协议层 (1) 通讯的开始与停止 (2)时钟极性CPOL.时钟相位CPHA 二.STM32的SPI外设 1. 通讯引脚 ...
- crh寄存器_牛人的STM32学习笔记(寄存器版本).doc
牛人的STM32学习笔记(寄存器版本) 一.GPIO口的配置 STM32的DGPIO口最多可以有7组(GPIOa~GPIOg),而每一组GPIO口均有16个双向IO组成.并且没个IO口均可配置成8种模 ...
- STM32学习笔记(13)——模数转换ADC
这个月一直忙于准备考试,已经考完一半科目了,偷闲写了这篇文章.因为还没考完试,估计还得咕一段时间了. STM32学习笔记(13)--模数转换ADC 第一部分:ADC功能框图 一.输入电压 二.输入通道 ...
- STM32学习笔记(八)丨ADC模数转换器(ADC单、双通道转换)
本篇文章包含的内容 一.ADC 模数转换器 1.1 ADC简介 1.2 逐次逼近型ADC工作原理 1.3 STM32中的ADC基本结构 1.4 STM32中ADC的输入通道 1.5 STM32中的AD ...
最新文章
- 安卓入门系列-06常见布局之ConstraintLayout(约束布局)
- ux和ui_UI和UX设计师的10种软技能
- [学习笔记] 二分图基础定理的相关证明
- MySQL 第二次练习(源码安装、数据库和表的建立)
- java 实体类重写排序,对自定义对象进行排序(C++/Java) | 学步园
- PSP,CPS1街机模拟器终于出来了(CAPCOM CPS1 Emulators for the PSP),完美!
- ENVI FLAASH大气校正常见错误及解决方法
- linux的打开文件工具,xdg-open|从Liunx终端工具打开文件系统说起
- 第十三周作业-必做3
- linux文件安全与权限
- webstorm提示TypeError: this.cliEngine is not a constructor
- uniapp开发app真机调试连接电脑服务器请求失败解决方法
- 什么是微信群控系统,我来告诉你!
- Codeforces 91A-Newspaper Headline
- filepath直接指定到文件名吗_快速实现对文件按时间的重命名
- OpenShift 4 - 有关 Operator 相关概念和运维操作
- 没有密码如何卸载卡巴斯基?
- 地球兄弟版星球又出现了 Gliese 832 c系外行星
- 优思学院|关键路径方法CPM
- 圆弧插补程序c语言,用C语言写的简易的逐点比较法插补算法,包括直线逐点插补和圆弧插补...