首页 前端知识 STM32中APB2中常见的外设功能及其初始化过程

STM32中APB2中常见的外设功能及其初始化过程

2025-03-20 12:03:43 前端知识 前端哥 111 102 我要收藏

在 STM32 微控制器中,外设(Peripherals)是用于与外部设备或其他硬件模块进行通信和控制的硬件模块。STM32 提供了多种外设,涵盖了输入输出、通信、定时、数据处理等多种功能。我们将详细介绍 STM32 中常见的外设及其初始化过程。

常见外设及其功能

1. GPIO(General Purpose Input/Output)
  • 功能:GPIO 是 STM32 的一个重要外设,用于与外部设备进行数字信号的输入输出。每个 GPIO 引脚可以配置为输入、输出、复用功能或模拟模式,能够控制外部设备(如 LED、开关)或读取外部信号(如按钮状态)。
  • 常见应用:按钮读取、LED 控制、外部中断处理等。
初始化过程
// 使能 GPIO 时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

// 配置 GPIO 引脚为推挽输出模式
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;               // 引脚 0
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;        // 推挽输出模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;       // 50 MHz 的输出速度
GPIO_Init(GPIOB, &GPIO_InitStructure);

// 设置 GPIO 引脚输出高电平
GPIO_SetBits(GPIOB, GPIO_Pin_0);
2. USART(Universal Synchronous Asynchronous Receiver Transmitter)
  • 功能:USART 是用于串行通信的外设,可以支持异步(如常用的 RS-232)和同步通信。它广泛应用于与其他微控制器、传感器、PC 等设备之间的串行通信。
  • 常见应用:串口调试、无线通信、与其他设备进行数据交换。
初始化过程
// 使能 USART1 时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);

// 配置 USART1
USART_InitTypeDef USART_InitStructure;
USART_InitStructure.USART_BaudRate = 9600;               // 波特率设置为 9600
USART_InitStructure.USART_WordLength = USART_WordLength_8b; // 数据位 8 位
USART_InitStructure.USART_StopBits = USART_StopBits_1;   // 1 个停止位
USART_InitStructure.USART_Parity = USART_Parity_No;      // 无校验位
USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx; // 发送与接收模式
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; // 无硬件流控制
USART_Init(USART1, &USART_InitStructure);

// 使能 USART1
USART_Cmd(USART1, ENABLE);
3. SPI(Serial Peripheral Interface)
  • 功能:SPI 是一种高速的同步串行通信协议,广泛用于微控制器与外设之间的数据交换,具有全双工通信、支持多个设备连接等特点。
  • 常见应用:传感器数据读取、SD 卡通信、液晶显示控制等。
初始化过程
// 使能 SPI1 时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);

// 配置 SPI1
SPI_InitTypeDef SPI_InitStructure;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16; // 设置 SPI 时钟频率
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;          // 数据捕获在第一个时钟沿
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;            // 时钟空闲时低电平
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;     // 数据位长度 8 位
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; // 全双工模式
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;         // 配置为主模式
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;             // 软件管理 NSS 引脚
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;    // 数据最高位优先
SPI_Init(SPI1, &SPI_InitStructure);

// 使能 SPI1
SPI_Cmd(SPI1, ENABLE);
4. I2C(Inter-Integrated Circuit)
  • 功能:I2C 是一种同步的串行通信协议,用于在微控制器和外围设备之间传输数据。它只需要两根信号线:数据线(SDA)和时钟线(SCL)。I2C 支持多个主设备和多个从设备。
  • 常见应用:与传感器、EEPROM、RTC(实时时钟)等外围设备进行通信。
初始化过程
// 使能 I2C1 时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);

// 配置 I2C1
I2C_InitTypeDef I2C_InitStructure;
I2C_InitStructure.I2C_ClockSpeed = 100000;  // 100kHz 时钟频率
I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;  // I2C 模式
I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;  // 50% 占空比
I2C_InitStructure.I2C_OwnAddress1 = 0x00;    // 设置从设备地址
I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; // 7 位地址模式
I2C_Init(I2C1, &I2C_InitStructure);

// 使能 I2C1
I2C_Cmd(I2C1, ENABLE);
5. ADC(Analog-to-Digital Converter)
  • 功能:ADC 用于将模拟信号转换为数字信号,常用于读取来自传感器的模拟数据,例如温度、湿度、光照等传感器。
  • 常见应用:传感器数据采集、音频信号处理、电池电压监测等。
初始化过程
// 使能 ADC 时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);

// 配置 ADC1
ADC_InitTypeDef ADC_InitStructure;
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; // 独立模式
ADC_InitStructure.ADC_ScanConvMode = DISABLE;      // 单通道转换
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; // 连续转换
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1; // 外部触发
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;  // 右对齐数据
ADC_InitStructure.ADC_NbrOfChannel = 1;            // 1 个通道
ADC_Init(ADC1, &ADC_InitStructure);

// 使能 ADC
ADC_Cmd(ADC1, ENABLE);
6. TIM(Timer)
  • 功能:定时器外设可以用来产生定时中断、测量时间间隔、生成 PWM 信号等。定时器通常用于延时、定时任务、信号控制等场景。
  • 常见应用:延时操作、PWM 信号控制(如控制电机速度、LED 亮度)、生成时间事件等。
初始化过程
// 使能定时器时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

// 配置定时器
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_TimeBaseStructure.TIM_Period = 999;            // 自动重载寄存器值
TIM_TimeBaseStructure.TIM_Prescaler = 71;          // 预分频器
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; // 向上计数
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

// 使能定时器
TIM_Cmd(TIM2, ENABLE);

总结

STM32 提供了丰富的外设资源,包括 GPIO、USART、SPI、I2C、ADC、定时器等。每种外设都有其特定的功能和应用场景,开发者可以通过配置相应的寄存器来初始化和控制这些外设,完成各种硬件交互操作。每个外设的初始化过程通常包括以下步骤:

  1. 使能外设的时钟
  2. 配置外设的工作模式(如波特率、数据位、时钟频率等)。
  3. 使能外设的相关功能
  4. 进行数据传输或控制操作

通过正确初始化外设,STM32 能够实现多种功能,从而满足不同的嵌入式应用需求。

转载请注明出处或者链接地址:https://www.qianduange.cn//article/24210.html
评论
发布的文章

动态规划感悟1

2025-03-20 12:03:52

华为NAS真实测评!

2025-03-20 12:03:52

Java设计模式之代理模式

2025-03-20 12:03:51

Linux 锁、线程同步

2025-03-20 12:03:48

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!