STM32学习笔记(二)
1. 核心板电路
电路各部分:
单片机最小系统电路:包括单片机,主晶振,起振电容,RC复位电路
USB转串口电路(CH340芯片):负责将USB协议信号转换成单片机能处理的USTART串口通信
ASP自动下载电路:负责检测串口数据,实现自动下载功能
MicroUSB 接口:连接电脑,为核心板提供5V电源输入和串口通信
电源电路:为核心板提供5V和3.3V稳定电压
功能电路:含有LED、按键、蜂鸣器、RTC走时等附加功能
各元件作用:
滤波电容:去除电源电压的波动干扰
起振电容:帮助晶体振荡器稳定的工作
继电器:核心板的电源总开关
RTC晶振:为单片机内部的RTC时钟提供32.768kHz频率的时钟基准
2.点亮LED灯(用库文件)
PS:需要先链接sys.h文件
#include "sys.h"
关于初始化:
LED_Init();
所有I/O端口使用前必须初始化
初始化内容包括:
输入还是输出(接口工作模式)
端口号(比如:GPIO_PIN_ 1)
输出速率(2/10/50MHz)比如:GPIO_Speed_20MHz
启动GPIO端口
设置IO端口组
GPIO_Init(GPIOB, &GPIO_InitStructure);
即把GPIO_InitStructure结构体里设置的数据赋值给GPIOB端口,然后进行初始化。
方法一:GPIO_WriteBit函数
核心语句:
while(1){GPIO_WriteBit(LEDPORT,LED1,(BitAction)(1)) //LED1端口输出高电平GPIO_WriteBit(LEDPORT,LED2,(BitAction)(0)) //LED2端口输出低电平 }
这里使用了库函数:GPIO_WriteBit函数
参数1:使用哪一组端口
参数2:使用这一组里的第几号端口
参数3: BitAction是一个枚举变量,在括号中设置的值可赋值给这个枚举变量。
这里参数3也可以直接换成Bit_RESET或者Bit_SET,分别表示清零和置1
详见STM32固件库使用手册P120
方法二:GPIO_ResetBits函数
GPIO_ResetBits(GPIOA,GPIO_Pin_10);
即把GPIOA组的GPIO_Pin_10端口清零
方法三:GPIO_SetBits函数
GPIO_SetBits(GPIOA,GPIO_Pin_11);
即把GPIOA组的GPIO_Pin_11端口置1
方法四:GPIO_Write函数
GPIO_Write(GPIOA,0x0001); //直接把GPIOA这一组的端口变量都赋值为1 GPIO_Write(GPIOB,0x0000); //直接把GPIOB这一组的端口变量都赋值为0
不建议使用这种全部赋值的方法
PS:直接操作寄存器法
需要多层宏定义嵌套,然后最底层的定义变量直接对寄存器地址进行操作。一般板子厂家会提供。
3.LED闪灯程序
主要就是利用延时函数,在开灯和关灯之间加入延时即可看到闪灯效果。
延时函数如下:
delay_us(); //微秒级延时函数,括号里即可填入延时时间 delay_ms(); //毫秒级延时函数,括号里即可填入延时时间
方法一:普通延时法
微秒级延时函数:
void delay_us(u16 time) { u16 i=0; while(time--){i=10; //自己定义while(i--) ; }
毫秒级延时函数:
void delay_ms(u16 time) { u16 i=0; while(time--){i=12000; //自己定义while(i--) ; } }
即利用for循环,一直倒计时计数,直到为0跳出循环往下执行
优点:比较简单,容易理解与使用
缺点:不是很精准
方法二:SysTick库函数
通过系统的滴答定时器完成,可以精密延时
滴答计时器:本质是倒计时计时器
SysTick库函数详见STM32固件库使用手册P238
第一步:重计数初值
这里涉及到单片机的主频(AHB_INPUT)
主频:指计数为多少时为1ms
比如:主频是72MHz,则计数72次为1ms
#define AHB_INPUT 72 //定义主频 u32 us //定义延时时间长度,即us SysTick->LOAD = AHB_INPUT * us; //即把主频乘以延时时间长度,然后这个值赋值给滴答定时器SysTick里的时间计时器LOAD里
第二步:打开定时器
SysTick->CTRL = 0X00000005;
第三步:等待计数到0
while(!(SysTick->CTRL&0X00010000));
当 SysTick->CTRL 的值不为0时,一直进入while的循环
直到 SysTick->CTRL 的值为0是,才跳出循环,往下执行
第四步:关闭计时器
SysTick->CTRL = 0X00000004;
完整延时函数:
微秒级延时函数:
#define AHB_INPUT 72 void delay_us(u32 us){//重装计数初值SysTick->LOAD = AHB_INPUT * us; //打开定时器SysTick->CTRL = 0X00000005;//等待计数到0while(!(SysTick->CTRL&0X00010000));//关闭定时器SysTick->CTRL = 0X00000004; }
毫秒级延时函数:
void delay_ms(u16 ms){while(ms-- != 0){delay_us(1000); //调用1000us的延时} }
STM32学习笔记(二)相关推荐
- STM32学习笔记二:命令行工具安装
一目了然 1 简述 2 Windows Terminal 安装 3 PowerShell7 安装 4 Cmake安装 5 ninja安装 1 简述 熟悉 Linux 系统的小伙伴都清楚 Termina ...
- STM32学习笔记:FLASH读写之二
因为关于STM32的Flash相关的知识点比较多,所以该内容的学习我们分为以下4个部分 1.RAM和ROM的一些基本概念 -- STM32学习笔记:FLASH读写之一 2.STM32的Flash寄存器 ...
- 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. 通讯引脚 ...
- 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 ...
最新文章
- JS设计模式学习实例之单例模式
- hadoop常用命令之hdfs
- wpf 客户端【JDAgent桌面助手】开发详解(四) popup控件的win8.0的bug
- PHP — Cookie and Session篇
- Android 给按钮绑定事件
- 如果您在2015年编写过Java代码-这是您不容错过的趋势
- Python办公自动化,对文件进行自由操作
- 用script实现Web Service的异步调用
- Fiddler环境配置、抓包、手机代理
- Mysql数据库常用命令总结
- PCM音量控制(高级篇)
- 微信小程序获取用户手机号
- 如何办理杭州市民卡|非杭户籍人员个人申领流程
- 3GPP RAN第一次F2F会议,都干了些啥?
- python[爬虫]爬取百万条新浪新闻 新浪滚动新闻中心(多进程)
- VMware 安装安卓虚拟机 一步一步的手把手教学
- python tkinter画布设置按钮对图片放大缩小_Tkinter可调整大小的对象Python画布
- 路由器的工作原理,形成,转发数据包的过程
- Windows 计算机上查看 DNS 缓存的方法
- python文件另存为快捷键_Word文件另存为快捷键ctrl加什么?
热门文章
- 不知道华为手机识别图片文字怎么弄?2个识别方法收好了
- Minimum supported Gradle version is 6.1.1. Current version is 5.6.4
- FinClip黑客马拉松@您,小程序风云来袭
- 多帧图像增强 matlab,MATLAB中图像增强技术的实现
- 服务器系统2008r2企业版补丁,windows2008R2服务器更新补丁
- 百度小程序html转码,百度小程序转换工具
- 解决 ‘@‘ that cannot start any token. (Do not use @ for indentation)
- android 5.1一键root工具箱,最新的安卓5.1.1 ROOT教程(不需要刷第三方内核)
- commons-lang3官方教程
- VScode前进后退快捷键