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学习笔记(二)相关推荐

  1. STM32学习笔记二:命令行工具安装

    一目了然 1 简述 2 Windows Terminal 安装 3 PowerShell7 安装 4 Cmake安装 5 ninja安装 1 简述 熟悉 Linux 系统的小伙伴都清楚 Termina ...

  2. STM32学习笔记:FLASH读写之二

    因为关于STM32的Flash相关的知识点比较多,所以该内容的学习我们分为以下4个部分 1.RAM和ROM的一些基本概念 -- STM32学习笔记:FLASH读写之一 2.STM32的Flash寄存器 ...

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

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

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

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

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

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

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

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

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

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

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

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

  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. JS设计模式学习实例之单例模式
  2. hadoop常用命令之hdfs
  3. wpf 客户端【JDAgent桌面助手】开发详解(四) popup控件的win8.0的bug
  4. PHP — Cookie and Session篇
  5. Android 给按钮绑定事件
  6. 如果您在2015年编写过Java代码-这是您不容错过的趋势
  7. Python办公自动化,对文件进行自由操作
  8. 用script实现Web Service的异步调用
  9. Fiddler环境配置、抓包、手机代理
  10. Mysql数据库常用命令总结
  11. PCM音量控制(高级篇)
  12. 微信小程序获取用户手机号
  13. 如何办理杭州市民卡|非杭户籍人员个人申领流程
  14. 3GPP RAN第一次F2F会议,都干了些啥?
  15. python[爬虫]爬取百万条新浪新闻 新浪滚动新闻中心(多进程)
  16. VMware 安装安卓虚拟机 一步一步的手把手教学
  17. python tkinter画布设置按钮对图片放大缩小_Tkinter可调整大小的对象Python画布
  18. 路由器的工作原理,形成,转发数据包的过程
  19. Windows 计算机上查看 DNS 缓存的方法
  20. python文件另存为快捷键_Word文件另存为快捷键ctrl加什么?

热门文章

  1. 不知道华为手机识别图片文字怎么弄?2个识别方法收好了
  2. Minimum supported Gradle version is 6.1.1. Current version is 5.6.4
  3. FinClip黑客马拉松@您,小程序风云来袭
  4. 多帧图像增强 matlab,MATLAB中图像增强技术的实现
  5. 服务器系统2008r2企业版补丁,windows2008R2服务器更新补丁
  6. 百度小程序html转码,百度小程序转换工具
  7. 解决 ‘@‘ that cannot start any token. (Do not use @ for indentation)
  8. android 5.1一键root工具箱,最新的安卓5.1.1 ROOT教程(不需要刷第三方内核)
  9. commons-lang3官方教程
  10. VScode前进后退快捷键