![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
STM32
文章平均质量分 73
灵虚天
这个作者很懒,什么都没留下…
展开
-
蓝桥杯嵌入式国赛知识点
一、数码管SEG数码管显示(PA1、PA2、PA3),PA1——SER串行输入数据,PA2——RCK输出锁存时钟,PA3——SCK移位寄存器时钟上升初始化:GPIO模式(PA1、PA2、PA3):GPIO_Mode_Out_PP推挽输出时钟:GPIOA共阴极显示,即:高电平时,发光二极管点亮,(0:灭,1:亮)每个数码管的8位二进制排序位【dp、g、f、e、d、c、b、a】因为串行输入时,是从前往后输出,接受时,会将数据从后往前保存,即先接受dp位,将dp保存到最后面因此,在设置输出原创 2021-10-23 09:50:53 · 1379 阅读 · 0 评论 -
stm32编程初始化设备步骤
1.使用LED使用GPIO 、锁存器步骤:1.开启时钟2.初始化GPIO结构体(包括8个LED和锁存器)PC8~PC15、PD2(模式:GPIO_Mode_Out_PP 推挽输出)3.写一个控制LED的函数因为LED和LCD公用GPIO,因此如果每次写入的是某一个GPIO的位,其他LED可能会在锁存器打开时因改变了LCD的值使LED也发生改变,因此,每一次改变LED的亮灭,应设置所有...原创 2021-10-23 09:54:26 · 6452 阅读 · 0 评论 -
蓝桥杯嵌入式客观题总结
一、CPU芯片:STM32F103RBT6STM32:32位的MCU(ST:意法半导体公司 M:微控制器 32:32bit )F = 通用类型 103:中容量 105、107大容量Z:144引脚 V:100引脚 R:64引脚 C:48引脚 T:36引脚(芯片引脚数目)4 = 16K 6 = 32K 8 = 64K B= 128K C =...原创 2021-10-16 15:57:36 · 2405 阅读 · 0 评论 -
TIM高级定时器(3)输入捕获——测量PWM脉宽、频率
以通用定时器TIM3产生脉冲信号,连接到高级定时器TIM1,捕获TIM1的PWM信号PWM输入捕获只能使用通道1和通道2,因为触发从模式控制器的信号只有TI1和TI2的#include "stm32f10x.h"//PWM 输出模式 TIM2产生PWM信号 F=TIM_CLK/[(ARR+1)(PSC+1)] 令频率为1kHz,使得psc=71,arr=9void TIM_Config()//Period=9 当Channel2Pulse=5,占空比为50%{ GPIO_原创 2021-03-07 20:24:45 · 3277 阅读 · 1 评论 -
TIM高级定时器(2)输出比较(互补输出)
1. 作用输出比较:用以输出PWM信号或脉冲信号输入捕获和输出比较的寄存器共用,具体看初始化时的配置2.PWM模式输出比较有8种模式,其中,只有PWM输出模式最常用。PWM输出就是对外输出脉宽(即占空比)可调的方波信号,信号频率由自动重装寄存器ARR的值决定,占空比由比较寄存器CCR的值决定。(CCR既是捕获寄存器,也是比较寄存器,是哪一个,看TIM的初始化模式)一般情况下使用PWM1模式,CNT递增,并配置高电平有效PWM1模式,默认低电平,满足条件使得通道有效,跳变到高电平PWM2原创 2021-03-07 20:24:33 · 7264 阅读 · 1 评论 -
TIM高级定时器(1)输入捕获、测脉宽
通用定时器(定时、输出比较、输入捕获)高级定时器(定时、输出比较、输入捕获、互补输出)STM32S103RBT6的开发板有一个高级定时器TIM1;3个通用定时器TIM2/3/4输出比较(输出PWM)、输入捕获(测量脉冲宽度,PWM输入)TIM1是高级定时器,和其他的不同的是:1.可以向上/向下/两边 (三种方式)计数,有一个重复计数器2.有4个GPIO,其中,通道1~3有互补输出3...原创 2021-03-07 20:24:14 · 8310 阅读 · 8 评论 -
I²C控制E²PROM(软件模拟)
因为硬件控制有时会发生错误,而软件模拟准确性更高,所以,一般使用软件模拟软件模拟,就是按照IIC的时序逻辑来模拟电平的产生。如图所示,我们需要自己模拟每一种信号的发生。起始信号,停止信号,数据发送,数据接受,发送ACK和NACK,等待应答信号。算了。。。炸了,一直改不对,找不到错在哪。。。。错代码如下#include "i2c.h"void I2C_EEPROM_Config()...原创 2020-01-29 16:33:56 · 405 阅读 · 0 评论 -
TIM基本定时器——定时
作用:定时、输出比较、输入捕获、互补输出分类:基本定时器(定时)通用定时器(定时、输出比较、输入捕获)高级定时器(定时、输出比较、输入捕获、互补输出)F103系列的开发板一般是俩个高级定时器TIM1、TIM8;4个通用定时器TIM2/3/4/5;2个基本定时器TIM6/7而根据容量的大小,又稍有区别。STM32S103RBT6开发板只有TIM1/2/3/4一、基本定时器:1....原创 2020-01-17 17:59:07 · 3017 阅读 · 0 评论 -
ADC
模拟–数字转换器共3个独立ADC(ADC1、ADC2、ADC3)12位分辨率每个独立ADC有18个通道,16个是外部通道ADCCLK最大是14MHz。转换时间=采样时间+12.5个时钟周期。采样时间通过寄存器来配置有俩种模式:注入模式和规则模式(没搞懂)函数:typedef struct{uint32_t ADC_Mode; //模式,一般使用ADC_Mode_Indep...原创 2020-01-17 12:16:24 · 469 阅读 · 0 评论 -
SPI
SPI连接处理器芯片和SD卡插座(CN4)由于不使用SD卡,所以只介绍一下他的协议。属于全双工通信,同步通信,串行通信,边沿触发。stm32设备一般最大支持36MHz(f(pclk)/2)。(IIC仅400kHz)SPI有4根引脚,其中SCK为时钟线,由于是全双工通信,所以有MOSI(主机输出从机输入)和MISO(主机输入从机输出),此外还有片选信号线SS,用来选择与哪一个从机通信。与I...原创 2020-01-15 18:13:46 · 795 阅读 · 0 评论 -
I²C控制E²PROM(硬件控制)
根据开发板的原理图,我们得知,SPI连接处理器芯片和SD卡插座(CN4)I²C连接处理器芯片和E²PROM(256B)芯片M24C02MN6(U6)UART2连接处理器芯片和USB转串口芯片IC_FT2232D(U3)UART1连接处理器芯片和串口转RS232芯片ST3232ECTR(U5)JTAG连接处理器芯片和USB转串口芯片IC_FT2232D(U3)(这是因为CN2既是USB调试...原创 2020-01-10 20:00:04 · 1944 阅读 · 0 评论 -
DMA
DMA有3种实现方式:内存->内存;内存->外设;外设->内存stm32有俩个DMA控制器:DMA1:7通道DMA2:5通道,只存在于大容量(256K-512K)和互联型产品(f105和f107系列)rbt6开发板属于中容量,标准型,只有DMA1;由图可知,内存->外设的方式,只能使用对应的通道,不能使用其他的。而内存->内存的方式,可以使用所有的通道。...原创 2020-01-09 11:29:36 · 767 阅读 · 0 评论 -
串口通信——UART
一、总体概况串口:有UART(通用同步异步收发器,单/半双/全双工),SPI(串行外设接口,半/全双工),I²C(集成电路总线,半双工)3种通信接口,他们都是串口,并口:有SDIO(4位并行)用来插SD卡;FSMC(16位并行),控制液晶或显存(SRAM)比特率·:bit/s波特率:码元/s一般的:0V-----0 3.3V-----1,很多时候都是按这个来算码元,所以一个码元就是...原创 2020-01-06 11:41:58 · 1325 阅读 · 0 评论 -
系统滴答定时器——SysTick
SysTick是属于内核外设。所以,只要是Cortex内核就都有。挂接在AHB总线上,一般经8分频后作为SysTickSysTick,系统定时器,只能递减,24位系统嘀嗒校准值固定为9000,当系统嘀嗒时钟设定为9MHz(HCLK/8的最大值),产生1ms时间基准。(1/(9*10^6))*9000=1/1000=1msSysTick定时器被捆绑在NVIC中,用于产生SYSTICK异常(异常...原创 2020-01-01 22:05:09 · 1236 阅读 · 0 评论 -
中断控制——NVIC和EXTI
对外设的控制方式,一般是四种,即:轮询,中断,DMA,通道。rbt6开发板显然没有DMA,也不存在通道。所以,控制方法就是轮询和中断。轮询方式在LED的点亮已经演示过,但仍然有缺陷,可能是因为时钟频率不够,导致按键时松开的速度如果太快,就不能点亮或者熄灭,使按键点亮LED有时会失败。中断一般会分为异常和外部的中断,异常是体现在内核的水平,主要就是指内核的外设,如系统滴答定时器等等。但在操作时...原创 2020-01-01 16:08:58 · 6086 阅读 · 1 评论 -
时钟操作LED
上一次已经知道固件库中是如何配置系统时钟的了,那么,如果想要按照自己的想法来配置一个超频或者低频的时钟,应该怎么办呢?同样的,我们将模板复制一份,然后在User目录中创建俩个目录,一个RCC目录下创建rcc.c和rcc.h,一个LED目录下创建led.c和led.h,然后导入工程当中,在魔棒中指定他们的路径。在这里我们使用HSE来设置系统时钟,当然,也可以使用HSI或者PLL来设置系统时钟。...原创 2019-12-31 21:30:44 · 226 阅读 · 0 评论 -
时钟树的认识及固件库中时钟的配置
由开发板的原理图可知,开发板使用的外源晶振是8MHZ。接入到OSC_IN和OSC_OUT,同时,并不存在OSC32_IN和OSC32_OUT这俩个引脚,又有XTIN和XTOUT俩个引脚接了6MHZ的晶振。1.HSE:高速的外部时钟,一般是8M的晶振RCC时钟控制寄存器的位16,即HSEON:外部高速时钟使能HSERDY:外部高速时钟就绪标志,当HSEON置1,使HSE使能, HSERDY...原创 2019-12-31 13:52:50 · 706 阅读 · 0 评论 -
固件库编程(3)--位带操作
参考文献:Cortex-M3权威指南(中文)第5.5章STM32中文参考手册_V10第2.3.2章位线操作是把寄存器中的某个位单独拿出来,放在位带区,并且在位带别名区重新膨胀为1个字,但只能对这个位进行操作。通过访问位带别名区来访问某个单独的位。位带区的每一个位都是通过对位带别名区的地址来访问。位带区一个位,对应位带别名区一个字(即4个字节)在 CM3中,有两个区中实现了位带。其中一个是 ...原创 2019-12-27 19:48:25 · 325 阅读 · 1 评论 -
固件库编程(2)按键检测--stm32f103rbt6
由原理图可以得知:四个按键k1,k2,k3,k4分别对应GPIOA的引脚0和8,GPIOB的引脚1和2,而按键是向开发板输入信息的,因此GPIO模式应该选择输入的方式,由原理图,我们发现,应该是上拉输入的方式,而且由于没有电容存在,不存在硬件消抖,因此,需要使用软件消抖的方式,如延时读取...原创 2019-12-27 10:47:53 · 762 阅读 · 0 评论 -
固件库编程初始,点亮LED--stm32f103rbt6
本次主要是使用固件库来实现LED的点亮工程文件直接使用复制上一次建的工程使用即可,在User下建一个LED的文件夹,里面存放led.c和led.h俩个文件,并加载到工程当中。没啥好说的,就是用固件库的函数,详情的话,我是看的野火的第19节视频1.led.c#include "led.h"void LED_GPIO_Config(void){ GPIO_InitTypeDef GPI...原创 2019-12-26 20:41:45 · 1003 阅读 · 0 评论 -
固件库文件解析及构建工程
本文是我在看野火视频时的笔记一、汇编语言编写的启动文件:stm32f103rbt6使用的是128kb的flash,因此,应该使用的文件是startup_stm32f10x_md.s主要作用:设置堆栈指针,PC指针,初始化中断向量表,配置系统时钟,调用c语言的_main前往c语言部分执行。二、配置系统时钟的时钟配置文件使用的文件是system_stm32f10x.c主要...原创 2019-12-26 16:58:02 · 486 阅读 · 1 评论 -
从寄存器到固件库--stm31f103RBT6
一、寄存器结构体定义好处:GPIO有A、B、C、D等等的端口,每个端口都有相同配置的寄存器,使用结构体只需要写一次结构体,就可以使结构体指针变量指向GPIO口的基地址,结构体成员会自动顺序分配地址如果不了解结构体为什么实现,建议先学c语言。。。#define PERIPH_BASE ((unsigned int)0x40000000)//总线#define APB1PERI...原创 2019-12-26 13:33:22 · 467 阅读 · 1 评论 -
寄存器初识----stm32f103rbt6
(由于第一次在自带的浏览器写,结果在粘贴代码时网页卡死,没有保存。。。所以没了。。。这是第二次写,所以介绍简略了许多)目的:通过对寄存器的操作,点亮LED;参考文档:国信长天嵌入式竞赛平台原理图,stm32f103rbt6 ,STM32中文参考手册_V10,Cortex-M3权威指南(中文)通过对文档的翻阅,我们知道了LED1-8使用的是开发板的PC8-15;即GPIO的C端口的第8-15...原创 2019-12-23 20:36:04 · 1605 阅读 · 0 评论