当前位置: 首页 > news >正文

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标准库开发常用函数的使用和代码说明

文章目录 GPIO(General Purpose Input/Output)NVIC(Nested Vectored Interrupt Controller)DMA(Direct Memory Access)USART(Universal Synchronous/Asynchronous Receiver/Transmitter&#xf…...

有关合泰BA45F5260中断的思考

最近看前辈写的代码,发现这样一段代码: #ifdef SUPPORT_RF_NET_FUNCTION if(UART_INT_is_L()) { TmrInsertTimer(eTmrHdlUartRxDelay,TMR_PERIOD(2000),NULL); break; } #endif 其中UART_INT_is_L&am…...

Numpy-算数函数与数学函数

⛳算数函数 如果参与运算的两个对象都是ndarray,并且形状相同,那么会对位彼此之间进 第 30 页 行( - * /)运算。NumPy 算术函数包含简单的加减乘除: add(),subtract(),multiply() 和divide()。 &#x1f…...

Nginx在springboot中起到的作用

面试时这样回答: 在Spring Boot项目中使用Nginx可以有以下用途: 1. 反向代理:Nginx可以作为反向代理服务器,将外部请求转发到后端的Spring Boot应用,并可以实现负载均衡、高可用、缓存等功能,提高系统的性…...

12.(开发工具篇vscode+git)vscode 不能识别npm命令

1:vscode 不能识别npm命令 问题描述: 解决方式: (1)右击VSCode图标,选择以管理员身份运行; (2)在终端中执行get-ExecutionPolicy,显示Restricted&#xff…...

如何在MacBook上彻底删除mysql

好久以前安装过,但是现在配置mysql一直出错,索性全部删掉重新配置。 一、停止MySQL服务 首先,请确保 MySQL 服务器已经停止运行,以免影响后续的删除操作。 sudo /usr/local/mysql/support-files/mysql.server stop如果你输入之…...

web攻击面试|网络渗透面试(一)

Web攻击面试大纲 常见Web攻击类型 1.1 SQL注入攻击 1.2 XSS攻击 1.3 CSRF攻击 1.4 命令注入攻击SQL注入攻击 2.1 基本概念 2.2 攻击原理 2.3 防御措施XSS攻击 3.1 基本概念 3.2 攻击原理 3.3 防御措施CSRF攻击 4.1 基本概念 4.2 攻击原理 4.3 防御措施命令注入攻击 5.1 基本概…...

VBA操作WORD(六)另存为不含宏的文档

Sub 另存为不含宏的文档()Application.DisplayAlerts False Application.ScreenUpdating FalseDim oDoc As DocumentSet oDoc Word.ActiveDocumentDim oRng As RangeSet oRng oDoc.ContentDim sPath As String默认存储路径,当前用户桌面,注释掉的是当…...

分享69个Java源码,总有一款适合您

Java源码 分享69个Java源码,总有一款适合您 下面是文件的名字,我放了一些图片,文章里不是所有的图主要是放不下...,大家下载后可以看到。 源码下载链接: https://pan.baidu.com/s/1ZgbJhMNwIyFyqFzHsDdL5w 提取码&a…...

《cool! autodistill帮你标注数据训练yolov8模型》学习笔记

《cool! autodistill帮你标注数据训练yolov8模型》 Summary Autodistill是一个用于自动标注数据训练边缘模型的工具。 Highlights 💡 Autodistill由Robotflow推出,用于训练建立部署计算机视觉模型。💻 通过使用大模型自动标注和训练小模型…...

Rust vs Go:常用语法对比(十)

题图来自 Rust vs. Golang: Which One is Better?[1] 182. Quine program Output the source of the program. 输出程序的源代码 package mainimport "fmt"func main() { fmt.Printf("%s%c%s%c\n", s, 0x60, s, 0x60)}var s package mainimport "fm…...

SliverPersistentHeader组件 实现Flutter吸顶效果

效果&#xff1a; 20230723-212152-73_Trim 代码&#xff1a; import package:flutter/cupertino.dart; import package:flutter/material.dart;class StickHeaderPage extends StatefulWidget {overrideState<StatefulWidget> createState() {// TODO: implement creat…...

Nginx性能优化配置

一、全局优化 # 工作进程数 worker_processes auto; # 建议 CPU核心数|CPU线程数# 最大支持的连接(open-file)数量&#xff1b;最大值受限于 Linux open files (ulimit -n) # 建议公式&#xff1a;worker_rlimit_nofile > worker_processes * worker_connections…...

杭州多校2023“钉耙编程”中国大学生算法设计超级联赛(4)

1003Simple Set Problem 首先将元素的值 x 以及所属集合的编号 y 作为二元组 (x,y) 存入数组&#xff0c;然后按照 x 升序排列&#xff0c; 之后使用双指针扫描数组&#xff08;尺取法&#xff09;&#xff0c;当区间内出现了所有编号时更新答案的最小值&#xff0c; #includ…...

音视频入门之音频采集、编码、播放

作者&#xff1a;花海blog 今天我们学习音频的采集、编码、生成文件、转码等操作&#xff0c;我们生成三种格式的文件格式&#xff0c;pcm、wav、aac 三种格式&#xff0c;并且我们用 AudioStack 来播放音频&#xff0c;最后我们播放这个音频。 使用 AudioRecord 实现录音生成…...

在 Linux 系统中,如何发起POST/GET请求

在 Linux 系统中&#xff0c;可以使用命令行工具 curl 或者 wget 来发送 POST 请求。这两个工具都是非常常用的命令行工具&#xff0c;可以通过命令行直接发送 HTTP 请求。 1. 使用 curl 发送 POST 请求&#xff1a; curl -X POST -H "Content-Type: application/json&q…...

文心一言大数据模型-文心千帆大模型平台

官网&#xff1a; 文心千帆大模型平台 (baidu.com) 文心千帆大模型 (baidu.com) 模型优势 1、模型效果优&#xff1a;所需标注数据少&#xff0c;在各场景上的效果处于业界领先水平 2、生成能力强&#xff1a;拥有丰富的AI内容生成&#xff08;AIGC&#xff09;能力 3、应用…...

django学习笔记(1)

django创建项目 先创建一个文件夹用来放django的项目&#xff0c;我这里是My_Django_it 之后打开到该文件下&#xff0c;并用下面的指令来创建myDjango1项目 D:\>cd My_Django_itD:\My_Django_it>"D:\zzu_it\Django_learn\Scripts\django-admin.exe" startpr…...

postgresql主从搭建

postgresql主从搭建 主从服务器分别安装好postgresql 主库 创建数据库热备帐号replica&#xff0c;密码123456为例&#xff0c;则执行以下命令 create role replica login replication encrypted password 123456;打开 pg_hba.conf 配置文件&#xff0c;设置 replica 用户白…...

将Parasoft和ChatGPT相结合会如何?

ChatGPT是2023年最热门的话题之一&#xff0c;是OpenAI训练的语言模型。它能够理解和生成自然语言文本&#xff0c;并接受过大量数据的训练&#xff0c;包括用各种编程语言编写的许多开源项目的源代码。 软件开发人员可以利用大量的知识库来协助他们的工作&#xff0c;因为它具…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

微信小程序云开发平台MySQL的连接方式

注&#xff1a;微信小程序云开发平台指的是腾讯云开发 先给结论&#xff1a;微信小程序云开发平台的MySQL&#xff0c;无法通过获取数据库连接信息的方式进行连接&#xff0c;连接只能通过云开发的SDK连接&#xff0c;具体要参考官方文档&#xff1a; 为什么&#xff1f; 因为…...

Android15默认授权浮窗权限

我们经常有那种需求&#xff0c;客户需要定制的apk集成在ROM中&#xff0c;并且默认授予其【显示在其他应用的上层】权限&#xff0c;也就是我们常说的浮窗权限&#xff0c;那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

代码规范和架构【立芯理论一】(2025.06.08)

1、代码规范的目标 代码简洁精炼、美观&#xff0c;可持续性好高效率高复用&#xff0c;可移植性好高内聚&#xff0c;低耦合没有冗余规范性&#xff0c;代码有规可循&#xff0c;可以看出自己当时的思考过程特殊排版&#xff0c;特殊语法&#xff0c;特殊指令&#xff0c;必须…...

从面试角度回答Android中ContentProvider启动原理

Android中ContentProvider原理的面试角度解析&#xff0c;分为​​已启动​​和​​未启动​​两种场景&#xff1a; 一、ContentProvider已启动的情况 1. ​​核心流程​​ ​​触发条件​​&#xff1a;当其他组件&#xff08;如Activity、Service&#xff09;通过ContentR…...

深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏

一、引言 在深度学习中&#xff0c;我们训练出的神经网络往往非常庞大&#xff08;比如像 ResNet、YOLOv8、Vision Transformer&#xff09;&#xff0c;虽然精度很高&#xff0c;但“太重”了&#xff0c;运行起来很慢&#xff0c;占用内存大&#xff0c;不适合部署到手机、摄…...