stm32标准库开发常用函数的使用和代码说明

文章目录

    • GPIO(General Purpose Input/Output)
    • NVIC(Nested Vectored Interrupt Controller)
    • DMA(Direct Memory Access)
    • USART(Universal Synchronous/Asynchronous Receiver/Transmitter)
    • TIM(Timer)
    • EXTI(External Interrupt)

GPIO(General Purpose Input/Output)

用于控制端口的读写操作。

  1. GPIO_Init:初始化GPIO端口。

    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; // 配置端口Pin号
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 配置输出推挽模式
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 配置输出速度
    GPIO_Init(GPIOA, &GPIO_InitStructure); // 初始化GPIOA端口
    
  2. GPIO_WritePin、GPIO_ReadPin:写入或读取指定GPIO引脚的状态。

    GPIO_WritePin(GPIOA, GPIO_Pin_0, GPIO_PIN_SET); // 将GPIOA的Pin_0引脚状态设置为高
    uint8_t pin_state = GPIO_ReadPin(GPIOA, GPIO_Pin_0); // 读取GPIOA的Pin_0引脚状态
    
  3. GPIO_SetPin:设置指定GPIO引脚的状态为高电平。

    GPIO_SetPin(GPIOA, GPIO_Pin_0); // 将GPIOA的Pin_0引脚状态设置为高电平
    
  4. GPIO_ResetPin:将指定GPIO引脚的状态复位为低电平。

    GPIO_ResetPin(GPIOA, GPIO_Pin_0); // 将GPIOA的Pin_0引脚状态复位为低电平
    

NVIC(Nested Vectored Interrupt Controller)

用于管理中断相关操作。

  1. NVIC_EnableIRQ:使能指定的中断。

    NVIC_EnableIRQ(USART1_IRQn); // 使能USART1中断
    
  2. NVIC_DisableIRQ:禁用指定的中断。

    NVIC_DisableIRQ(USART1_IRQn); // 禁用USART1中断
    
  3. NVIC_SetPriority:设置指定中断的优先级。

    NVIC_SetPriority(USART1_IRQn, 2); // 设置USART1中断的优先级为2
    

DMA(Direct Memory Access)

用于实现高速数据传输,减轻CPU负荷。

  1. DMA_Init:初始化DMA通道。
    DMA_InitTypeDef DMA_InitStructure;
    DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&USART1->DR; // 外设基地址
    DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&data; // 存储器基地址
    DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST; // 方向为从外设到存储器
    DMA_InitStructure.DMA_BufferSize = sizeof(data); // 数据大小
    DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; // 禁止外设地址增量
    DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; // 使能存储器地址增量
    DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; // 外设数据宽度为字节
    DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; // 存储器数据宽度为字节
    DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; // 正常模式
    DMA_InitStructure.DMA_Priority = DMA_Priority_High; // 高优先级
    DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; // 禁止存储器到存储器传输
    DMA_Init(DMA1_Channel4, &DMA_InitStructure); // 初始化DMA通道
    
  2. DMA_Start:启动DMA传输。
    DMA_Start(DMA1_Channel4); // 启动DMA1的通道4传输
    
  3. DMA_Stop:停止DMA传输。
    DMA_Stop(DMA1_Channel4); // 停止DMA1的通道4传输
    

USART(Universal Synchronous/Asynchronous Receiver/Transmitter)

用于串口通信。

  1. USART_Init:初始化串口。
USART_InitTypeDef USART_InitStructure;
USART_InitStructure.USART_BaudRate = 115200; // 波特率为115200
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_Rx | USART_Mode_Tx; // 支持接收和发送模式
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; // 无硬件流控制
USART_Init(USART1, &USART_InitStructure); // 初始化USART1
  1. USART_SendData:向串口发送数据。
USART_SendData(USART1, data); // 向USART1串口发送数据
  1. USART_ReceiveData:从串口接收数据。
data = USART_ReceiveData(USART1); // 从USART1串口接收数据
  1. USART_ITConfig:配置串口中断。
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); // 配置USART1的接收中断使能

TIM(Timer)

用于定时器功能。

  1. TIM_TimeBaseInit:初始化定时器。
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_TimeBaseStructure.TIM_Prescaler = 7200; // 预分频系数
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; // 计数模式为向上计数
TIM_TimeBaseStructure.TIM_Period = 1000; // 自动重装载值
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; // 时钟分频因子
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); // 初始化TIM2定时器
  1. TIM_Cmd:启动或停止定时器计数。
TIM_Cmd(TIM1, ENABLE); // 启动TIM1计数
TIM_Cmd(TIM2, DISABLE); // 停止TIM2计数
  1. TIM_GetCounter:获取定时器的当前计数值。
uint16_t counter = TIM_GetCounter(TIM3); // 获取TIM3的当前计数值

EXTI(External Interrupt)

外部中断,用于响应外部事件触发的中断。

  1. EXTI_Init:初始化外部中断线路。
EXTI_InitTypeDef EXTI_InitStruct;
EXTI_InitStruct.Line = EXTI_Line0;                // 外部中断线路号
EXTI_InitStruct.Mode = EXTI_Mode_Interrupt;       // 中断模式
EXTI_InitStruct.Trigger = EXTI_Trigger_Rising;     // 触发方式
EXTI_InitStruct.GPIOSource = GPIO_PortSourceGPIOA; // GPIO端口源
EXTI_InitStruct.GPIO_PinSource = GPIO_PinSource0;  // GPIO引脚源
EXTI_Init(&EXTI_InitStruct);
  1. EXTI_ClearFlag:清除外部中断标志位。
EXTI_ClearFlag(EXTI_Line0);
  1. EXTI_GetITStatus:获取外部中断状态。
if (EXTI_GetITStatus(EXTI_Line0) != RESET)
{
    // 外部中断事件已发生
}

你可能感兴趣的:(stm32,单片机,嵌入式硬件)