STM32 江科大STM32笔记汇总 (已完结)
目录
1. 引言
在现代嵌入式系统中,STM32系列微控制器以其强大的性能和广泛的应用被广泛使用。本文将系统性地总结江科大在STM32方面的学习笔记,涵盖了从基础知识到复杂项目的实现,适合初学者和有一定基础的开发者参考。
2. STM32概述
2.1 STM32系列介绍
STM32是意法半导体(STMicroelectronics)推出的一系列基于ARM Cortex-M内核的32位微控制器。STM32系列根据不同的性能、功耗需求和外设支持分为多个子系列,如STM32F0、STM32F1、STM32F4等。
2.2 STM32的应用领域
STM32微控制器因其高性价比和丰富的外设接口,广泛应用于以下领域:
- 家电控制
- 工业自动化
- 物联网
- 医疗设备
- 汽车电子
3. 开发环境搭建
3.1 硬件准备
- 开发板:STM32F4 Discovery或Nucleo开发板
- 编程器:ST-LINK V2
- 传感器模块:DHT11温湿度传感器、HC-SR04超声波传感器等
- 其他外设:LED灯、蜂鸣器等
3.2 软件工具链安装
- 安装Keil MDK或STM32CubeIDE:这是官方推荐的开发环境。
- 安装STM32CubeMX:用于生成初始化代码和配置外设。
- 安装驱动程序:确保ST-LINK驱动安装成功,以便对开发板进行烧录。
4. STM32基本功能
4.1 GPIO操作
GPIO(通用输入输出)是STM32最基本的外设之一,用于控制LED、按钮等设备。以下是GPIO的基本操作:
cCopy Code#include "stm32f4xx.h"
void GPIO_Config(void) {
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN; // 使能GPIOA时钟
GPIOA->MODER |= (1 << 10); // 设置PA5为输出模式
}
void LED_Blink(void) {
while (1) {
GPIOA->ODR ^= (1 << 5); // 切换PA5状态
for (volatile int i = 0; i < 100000; i++); // 延时
}
}
4.2 定时器使用
定时器可用于生成延时、PWM信号等功能。STM32的定时器配置相对简单,以下是一个基本的定时器示例:
cCopy Codevoid Timer_Config(void) {
RCC->APB1ENR |= RCC_APB1ENR_TIM2EN; // 使能TIM2时钟
TIM2->PSC = 16000 - 1; // 设置预分频器
TIM2->ARR = 1000 - 1; // 设置自动重装载寄存器
TIM2->CR1 |= TIM_CR1_CEN; // 启动定时器
}
4.3 ADC与DAC
ADC(模数转换器)用于读取模拟信号,例如温度传感器的输出。DAC(数模转换器)则用于输出模拟信号。以下是ADC的简单使用示例:
cCopy Codevoid ADC_Config(void) {
RCC->APB2ENR |= RCC_APB2ENR_ADC1EN; // 使能ADC1时钟
ADC1->CR1 = 0; // 配置ADC
ADC1->CR2 |= ADC_CR2_ADON; // 使能ADC
}
uint16_t Read_ADC(void) {
ADC1->SQR3 = 0; // 选择通道0
ADC1->CR2 |= ADC_CR2_SWSTART; // 启动转换
while (!(ADC1->SR & ADC_SR_EOC)); // 等待转换完成
return ADC1->DR; // 获取转换结果
}
4.4 UART通信
UART(通用异步收发传输)用于串口通信,可以连接其他设备如GPS模块、蓝牙模块等。以下是UART的基本配置:
cCopy Codevoid UART_Config(void) {
RCC->APB1ENR |= RCC_APB1ENR_USART2EN; // 使能USART2时钟
USART2->BRR = 0x683; // 设置波特率
USART2->CR1 |= USART_CR1_TE | USART_CR1_RE; // 使能发送和接收
}
void UART_Send(char c) {
while (!(USART2->SR & USART_SR_TXE)); // 等待发送缓冲区空
USART2->DR = c; // 发送字符
}
5. 实例项目
5.1 LED闪烁
项目描述
实现一个简单的LED闪烁效果,通过定时器控制LED的闪烁频率。
硬件连接
- 将LED连接到PA5引脚。
完整代码
cCopy Code#include "stm32f4xx.h"
void GPIO_Config(void);
void Timer_Config(void);
void LED_Blink(void);
int main(void) {
GPIO_Config();
Timer_Config();
LED_Blink();
}
void GPIO_Config(void) {
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN; // 使能GPIOA时钟
GPIOA->MODER |= (1 << 10); // 设置PA5为输出模式
}
void Timer_Config(void) {
RCC->APB1ENR |= RCC_APB1ENR_TIM2EN; // 使能TIM2时钟
TIM2->PSC = 16000 - 1; // 设置预分频器
TIM2->ARR = 1000 - 1; // 设置自动重装载寄存器
TIM2->CR1 |= TIM_CR1_CEN; // 启动定时器
}
void LED_Blink(void) {
while (1) {
if (TIM2->SR & TIM_SR_UIF) { // 判断更新标志位
GPIOA->ODR ^= (1 << 5); // 切换PA5状态
TIM2->SR &= ~TIM_SR_UIF; // 清除更新标志位
}
}
}
5.2 温湿度监测系统
项目描述
使用DHT11温湿度传感器采集环境温度和湿度,并通过UART发送数据。
硬件连接
- DHT11传感器连接至PA0引脚。
- 将UART连接至PC端进行数据接收。
完整代码
cCopy Code#include "stm32f4xx.h"
void UART_Config(void);
void DHT11_Init(void);
void Read_DHT11(uint8_t *temperature, uint8_t *humidity);
int main(void) {
UART_Config();
DHT11_Init();
uint8_t temperature, humidity;
while (1) {
Read_DHT11(&temperature, &humidity);
UART_Send(temperature);
UART_Send(humidity);
HAL_Delay(2000); // 每2秒读取一次
}
}
// UART配置省略...
void DHT11_Init(void) {
// 初始化DHT11传感器
}
void Read_DHT11(uint8_t *temperature, uint8_t *humidity) {
// 读取温湿度数据
}
5.3 超声波测距仪
项目描述
通过HC-SR04超声波传感器测量距离,并通过LED灯显示不同距离范围。
硬件连接
- 超声波模块的Trig和Echo接到PA1和PA2引脚。
完整代码
cCopy Code#include "stm32f4xx.h"
void GPIO_Config(void);
void Ultrasonic_Init(void);
float Measure_Distance(void);
int main(void) {
GPIO_Config();
Ultrasonic_Init();
while (1) {
float distance = Measure_Distance();
// 根据距离控制LED状态
}
}
// GPIO配置省略...
void Ultrasonic_Init(void) {
// 初始化超声波传感器
}
float Measure_Distance(void) {
// 测量距离
return distance;
}
5.4 运动控制系统
项目描述
基于STM32实现简易的电机运动控制系统,能够控制电机的转速和方向。
硬件连接
- 电机驱动模块连接至PB0和PB1引脚。
完整代码
cCopy Code#include "stm32f4xx.h"
void Motor_Init(void);
void Set_Motor_Speed(uint8_t speed);
void Set_Motor_Direction(uint8_t direction);
int main(void) {
Motor_Init();
while (1) {
Set_Motor_Speed(128); // 设置转速
Set_Motor_Direction(1); // 设置方向
}
}
// Motor配置省略...
void Set_Motor_Speed(uint8_t speed) {
// 设置电机转速
}
void Set_Motor_Direction(uint8_t direction) {
// 设置电机方向
}
6. 总结与展望
通过以上的总结和项目实例,我们对STM32的基本操作有了全面的了解。这些知识为后续更复杂的项目打下了基础。随着技术的发展,STM32的应用领域也会不断扩展,未来可以结合更多新技术,如物联网、人工智能等,实现更加智能化的系统。
希望本笔记能对学习STM32的同学们有所帮助,也期待大家在实际项目中不断探索与创新!