ARMv7架构定义了三大分工明确的系列:
STM32的用处取决于其内部资源,前面我们了解了STM32内部拥有非常多的通信接口。
比如:
-GPIO输入输出,中断,定时器,串口。
-理解了这四个外设,基本就入门了一款MCU。
-SPI,IIC,WDG, FSMC,ADC/DAC,SDIO等
-这些外设接口功能原理对每个芯片几乎都是一样。
对芯片而言就是多和少而已。
-UCOS,FATFS,EMWIN等。以及一些应用。
(1)电源电路
(2)复位电路
(3)晶振电路
(4)下载电路
(5)主控芯片
包括核心主频,内存,闪存,工作模式,A、D数据转换,DMA,定时器,以及通信协议。
比如:
GPIO( general purpose intput output )是通用输入输出端口的简称,可以通过软件来控制其输入和输出。
STM32芯片的GPIO引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。
(连接好STM32、ST-Link,然后把程序写入STM32,再給电,就可以自动运行这个程序,点灯)
步骤:
(1)看硬件原理图,找到LED1的引脚 — PC13
连接操作:对应着连就行啦,看文字对应来连,很简单。先把STM32的那一排连上,再对应着某个线,连接STLink的对应位置。
(2)看存储器map,找到RCC依赖的总线 — 3 memory and bus – APB2
(3)设置时钟 – RCC 0x40021000 + 0x18 使能时钟(给电)
(4)设置GPIO模式寄存器 – GPIOC 0x40011000 + 0x04 设置输出模式
(5)设置GPIO输出寄存器 – GPIOC 0x40011000 + 0x0C 给高低电平
//设置时钟 -- RCC 0x40021000 + 0x18 使能时钟(给电)
//设置GPIO模式寄存器 -- GPIOC 0x40011000 + 0x04 设置输出模式
//设置GPIO输出寄存器 -- GPIOC 0x40011000 + 0x0c 给高低电平
//自己去找寄存器,很low,很复杂,很麻烦的操作。
#define RCC_BASE *((int *)(0x40021000 + 0x18))
#define GPIOC_CON *((int *)(0x40011000 + 0x04))
#define GPIOC_DAT *((int *)(0x40011000 + 0x0c))
void delay(int n){
int i;
while(n--){
for(i=0;i<1000;i++);
}
}
int main(){
//设置APB2-GPIOC时钟(給电)
RCC_BASE|=0x1<<4;
//设置输出模式,推挽输出
//15,1111,往左移动20位,取反变为0000,左移20位左边的相与,这四位全变0
GPIOC_CON &= ~(0xf<<20);
GPIOC_CON |= 0x1<<20;//24到20,就变为0001了。
//设置高低电平
while(1){
delay(1000);
GPIOC_DAT |=0x1<<13;//给的是1,就是高电平。
delay(1000);
GPIOC_DAT &= ~(0x1<<13);//给0,低电平,取反再相与。
}
//while(1)防止程序跑飞
}
答:因为STM32默认所有的供电都是失效,所有的时钟都是停滞的
STM32与51的区别就是:当我们要读引脚电平的时候,也就是作为输入,我们必须要先把引脚设置为输入功能,才可以读。当我们要控制引脚高低电平的时候,也就是作为输出,我们必须要先把引脚设置为输出功能,才可以设置
注意事项:注意裸机汇编代码最后的死循环while(1);
作用:防止程序跑飞
代码中可以直接修改STM32上面某个地址的二进制(代码最终会下载到STM32上,并在通电时自动运行)
&(位与) 相同位都为1时才为1,其余为0
|(位或) 遇1为1, 只有两个位同为0时才为0
~(取反) 对数据的每一位取反,0–>1, 1–>0
^(异或) 两个数对应位,相异时为1, 相同时为0
<<(左移) 高位移除部分舍去, 低位不够部分补0
(右移) 低位移出部分舍去, 高位不够部分补0(正数)
清零 &~
置一 | 1
int a = 100;
int *p = &a;
*((int *)0xbfec1e38) = 100;
无源蜂鸣器和有源蜂鸣器
有源蜂鸣器内含振荡源,只要一通电就发声,但发生频率固定,音色单一;
无源蜂鸣器内部不含振荡源,内部结构相当于电磁场扬声器,可以通过给它输出一定频率的信号发声。
接线步骤:
VCC - 3.3
GND - G
I/O - 随便哪个GPIO的引脚
使用库函数需要多添加三个依赖
framework
gcc
GPIO
要干啥,就找啥
链接:https://pan.baidu.com/s/1NReOnZdVT6NQZ5IFZssiPA
提取码:jfy7
复制这段内容后打开百度网盘手机App,操作更方便哦