【硬件】无线传感网实训——STM32操作基础知识,蜂鸣器基础知识,寄存器实现操作STM32,使用库函数

一、STM32

1. STM32是什么**

  • ST:意法半导体,是一个公司的名字。
  • M:Microelectronics的缩写,表示微控制器,要注意微控制器和微处理器的区别
  • 32:32bit的意思,表示这是一个32bit的微控制器

在这里插入图片描述在这里插入图片描述

2. ARMv7架构。***

ARMv7架构定义了三大分工明确的系列:

  • “A”系列:面向尖端的基于虚拟内存的操作系统和用户应用
  • “R”系列:针对实时系统;
  • “M”系列:对微控制器。

3. STM32能做什么?

STM32的用处取决于其内部资源,前面我们了解了STM32内部拥有非常多的通信接口。

比如:

  • USART:ESP8266 WIFI模块、GSM模块、蓝牙模块、GPS模块、指纹识别模块等。
  • IIC:EEPROM、MPU6050陀螺c仪、 0.96寸OLED屏、 电容屏等。
  • SPI:串行FLASH、以太网W5500、 VS1003/1053音频模块、 SPI接口的OLED屏、电阻屏等。
  • AD/DA:光敏传感器模块、烟雾传感器模块、可燃气体传感器模块、简易示波器等

4. STM32学习方法:

(1)基本外设:

-GPIO输入输出,中断,定时器,串口。

-理解了这四个外设,基本就入门了一款MCU。

(2)基本外设接口:

-SPI,IIC,WDG, FSMC,ADC/DAC,SDIO等

-这些外设接口功能原理对每个芯片几乎都是一样。

对芯片而言就是多和少而已。

(3)高级功能:

-UCOS,FATFS,EMWIN等。以及一些应用。

5. STM32最小系统组成(电路原理图)

(1)电源电路

(2)复位电路

(3)晶振电路

(4)下载电路

(5)主控芯片

6. STM32的主控芯片。

包括核心主频,内存,闪存,工作模式,A、D数据转换,DMA,定时器,以及通信协议。

比如:

  • 主频跟cpu执行代码的速度相关,主频越高,cpu执行的速度就越快,芯片的成本也就越高;
  • 内存SRAM的大小跟代码运行时的需求相关,比如全局变量,局部变量等数据都是跟SRAM相关,C语言中的逻辑分区:堆/栈/全局变量区,从物理角度分:都是属于SRAM;
  • 闪存flash,是存放代码的物理区,bin/hex文件放在flash中,相当于电脑的硬盘;
  • DMA(Direct Memory Access)直接存储访问,是在外设与内存,内存与内存之间传输大量数据时用的,作用是减轻CPU的负担,以增加硬件的成本和复杂性,来达到提高整体效率的一种传输方案;
  • 通信协议,这个就很多了,UART,SPI,IIC,CAN,USB等,主要作用是与外界设备通信所用,不同的通信方式有不同的协议,这个需要结合外部芯片的驱动来进一步学习。

7. 什么是寄存器及寄存器映射?***

  • 寄存器映射:给已经分配好地址的有特定功能的内存单元起别名的过程就叫寄存器映射。
  • 寄存器:通过给有特定功能的内存单元起一个别名,这个别名就是我们所说的寄存器。
  • 可以使用指针来操作STM32的内存单元。

8. GPIO是什么?***

GPIO( general purpose intput output )是通用输入输出端口的简称,可以通过软件来控制其输入和输出。

STM32芯片的GPIO引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。

9. 寄存器LED点灯

(连接好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性能比51单片机高得多,但是功耗却比51低?

答:因为STM32默认所有的供电都是失效,所有的时钟都是停滞的

问题二:STM32与51的区别?

STM32与51的区别就是:当我们要读引脚电平的时候,也就是作为输入,我们必须要先把引脚设置为输入功能,才可以读。当我们要控制引脚高低电平的时候,也就是作为输出,我们必须要先把引脚设置为输出功能,才可以设置

注意事项:注意裸机汇编代码最后的死循环while(1);

作用:防止程序跑飞

二、C语言基础

代码中可以直接修改STM32上面某个地址的二进制(代码最终会下载到STM32上,并在通电时自动运行)

(1)位运算

  • &(位与) 相同位都为1时才为1,其余为0
    |(位或) 遇1为1, 只有两个位同为0时才为0
    ~(取反) 对数据的每一位取反,0–>1, 1–>0
    ^(异或) 两个数对应位,相异时为1, 相同时为0
    <<(左移) 高位移除部分舍去, 低位不够部分补0

  • (右移) 低位移出部分舍去, 高位不够部分补0(正数)

  • 清零 &~

  • 置一 | 1

(2)指针

int a = 100;
int *p = &a;

*((int *)0xbfec1e38) = 100;

(3)结构体

(4)函数

三、蜂鸣器

无源蜂鸣器和有源蜂鸣器

有源蜂鸣器内含振荡源,只要一通电就发声,但发生频率固定,音色单一;
无源蜂鸣器内部不含振荡源,内部结构相当于电磁场扬声器,可以通过给它输出一定频率的信号发声。

接线步骤:

  • VCC - 3.3

  • GND - G

  • I/O - 随便哪个GPIO的引脚

四、使用库函数

使用库函数需要多添加三个依赖
framework
gcc
GPIO
在这里插入图片描述
要干啥,就找啥
在这里插入图片描述

链接:https://pan.baidu.com/s/1NReOnZdVT6NQZ5IFZssiPA
提取码:jfy7
复制这段内容后打开百度网盘手机App,操作更方便哦

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值