首先就是开发板的各个硬件的介绍:
◆
MCU
:
STM32L475VET6
,
LQFP100
,
SRAM
:
128K
,
FLASH
:
512K
◆ 外扩
SPI FLASH
:
W25Q128
,
16M
字节
◆
1
个电源指示灯(蓝色)
◆
1
个
RGB
状态指示灯(红、绿、蓝三色)
◆
4
个功能按钮,其中
WK_UP
兼具唤醒功能
◆
1
个启动模式配置选择接口
◆
1
个复位按钮
◆
1
个红外接收头,并配备一款小巧的红外遥控器
◆
1
个红外发射头
◆
1
个有源蜂鸣器
◆
1
个光环境传感器:
AP3216C
◆
1
个贴片电机,带
TC214B
电机驱动芯片
◆
1
个六轴传感器:
ICM-20608
◆
1
个
TF
卡座
◆
1
个录音头(
MIC/
咪头)
◆
1
个
ATK
模块接口,支持
ALIENTEK
蓝牙
/GPS/MPU6050/RGB
灯等模块
◆
1
个高性能音频解码芯片:
ES8388
◆
1
个无线模块接口(
WIRELESS
),支持
NRF24L01
无线模块
/
以太网模块
◆
1
路立体声耳机接口
◆
1
个温湿度传感器:
AHT10
◆
1
个
TFTLCD
显示屏:
1.3
寸
240*240
分辨率
◆
1
个
WIFI
天线
◆
1
个
WIFI
模块:
AP6181
◆
1
个电源开关,控制整个板的电源
◆
1
个
STM32F103C8T6
,集成
ST LINK V2.1
功能
◆
1
个
ST LINK Micro USB
接口,可用于供电、程序下载、仿真调试和串口通讯
◆
1
个
USB OTG Micro USB
接口,用于供电、
USB Slave
和
USB Master
◆
1
组
5V
电源供应
/
接入口
◆
1
组
3.3V
电源供应
/
接入口
◆
1
组
IO
口扩展接口,并带
3.3V
电源输出接口
功能挺多的,拆分下来就是几个传感器,几个功能模块,芯片啥的就不懂了,不过还是继续学习。
介绍一下开发软件吧,我是用的是keil和STM32CubeMX
keil软件初始界面
就是对这一个个按钮,看过去就是了。
注意的是刚开始要进行调试:
*选择驱动
接下来点Setting
之后就是编写好程序,下载了
然后是在线调试程序(需要安装STM32 USB 虚拟串口驱动),程序上传到开发板之后才可以调试
基本上上面都是没什么用的东西,下面开始干货了--------------------------------STM32L4 基础知识
C语言
开始就是
位操作
示例
GPIOA->ODR &=0XFF0F; //
将第
4-7
位清
0
1111 1111 0000 1111
GPIOA->ODR |=0X0040; //设置相应位的值,即寄存器
第7位置1,
,不改变其他位的值,
00000000 0100 0000
IDR是查看引脚电平状态用的寄存器,ODR是引脚电平输出的寄存器
define
宏定义
define 是 C 语言中的预处理命令,它用于宏定义,可以提高源代码的可读性,为编程提 供方便。常见的格式:
#define
标识符 字符串
# ifdef
和
#if defined
条件编译 类似于if else
#ifdef
标识符
程序段
1
#else
程序段
2
#endif
它的作用是:当标识符已经被定义过(一般是用#define 命令定义),则对程序段 1 进行编
译,否则编译程序段 2。 其中#else 部分也可以没有,即:
#ifdef
程序段
1
#endif
例
#ifdef HAL_GPIO_MODULE_ENABLED
#include "stm32l4xx_hal_gpio.h"
#endif
这段代码的作用是判断宏定义标识符
HAL_GPIO_MODULE_ENABLED
是否被定义,如果
被定义了,那么就引入头文件
stm32l4xx_hal_gpio.h
。
extern
变量申明
C 语言中
extern
可以置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示
编译器遇到此变量和函数时在其他模块中寻找其定义。这里面要注意,对于 extern 申明变量可
以多次,但定义只有一次。在我们的代码中你会看到看到这样的语句:
extern u16 USART_RX_STA;
这个语句是申明 USART_RX_STA 变量在其他文件中已经定义了,在这里要使用到。
typedef 类型别名
typedef 用于为现有类型创建一个新的名字,或称为类型别名,用来简化变量的定义。
typedef 在 MDK 用得最多的就是定义结构体的类型别名和枚举类型
struct _GPIO
{
__IO uint32_t MODER;
__IO uint32_t OTYPER;
…
}
定义了一个结构体 GPIO,这样我们定义变量的方式为:
struct _GPIO GPIOA;//
定义结构体变量
GPIOA
而使用typedef是这样
typedef struct
{
__IO uint32_t MODER;
__IO uint32_t OTYPER;
…
} GPIO_TypeDef;
Typedef 为结构体定义一个别名 GPIO_TypeDef,这样我们可以通过 GPIO_TypeDef 来定义结
构体变量:
GPIO_TypeDef _GPIOA,_GPIOB;
STM32L4 总线架构
⚫
五条主控总线:
-Cortex-M4
内核
I
总线,
D
总线和
S
总线
- DMA1
存储器总线
- DMA2
存储器总线
⚫
八条被控总线:
- 内部
FLASH ICode
总线
-内部
FLASH DCode
总线
- 内部
SRAM1
-内部
SRAM2
- AHB1 外设
- AHB2 外设
- FMC
和
QSPI