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)
{// 外部中断事件已发生
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/12460.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

虎年现货黄金投资布局图

参与现货黄金交易的主要目的,是为了根据行情走势的变动,把握一些较佳的获利机会,在这样的一个过程中,如果投资者能够提前把布局的图表画好,那么就可能获得事半功倍的效果,而本文将为大家简单的介绍&#xf…

【主成分分析(PCA)- 鸢尾花】

主成分分析(PCA) 摘要 在现代数据科学中,维度灾难常常是数据处理与分析的一大难题。主成分分析(PCA)是一种广泛使用的数据降维技术,它通过将原始数据转换为新的低维空间,保留最重要的信息&…

15.Netty源码之EventLoop

highlight: arduino-light Netty配置主从Reactor模式 通过将NioServerSocketChannel绑定到了bossGroup。 将NioServerSocketChannel接收到请求创建的SocketChannel放入workerGroup。 将2个不同的SocketChannel绑定到2个不同的Group完成了主从 Reactor 模式。 分配NIOEventLoop的…

linux | zlib下载、安装

linux | zlib下载、安装 1. 下载 http://www.zlib.net/zlib-1.2.13.tar.gz 2.编译、安装 [fly752fac4b02e9 eeasy]$ tar zxf zlib-1.2.13.tar.gz [fly752fac4b02e9 eeasy]$ ls cramfs-1.1.tar.gz scons-3.0.1 scons-3.0.1.tar.gz smart-car zlib-1.2.13 zlib-1.2.13.tar…

行为型-备忘录模式(Memento Pattern)

说明 备忘录模式是一种行为型设计模式,通过捕获一个对象的内部状态,并在该对象之外保存这个状态,以便在需要时恢复对象到原先的状态。备忘录模式包含三个核心角色:。 发起人(Originator):负责…

论文精读之BERT

目录 1.摘要(Abstract) 2.引言(Introduction): 3.结论(Conlusion): 4.BERT模型算法: 5.总结 1.摘要(Abstract) 与别的文章的区别是什么:BERT是用来设计去…

springboot创建并配置环境(三) - 配置扩展属性(上集)

文章目录 一、介绍二、配置文件application.yml 一、介绍 在上一篇文章:springboot创建并配置环境(二) - 配置基础环境中,我们介绍了springboot如何配置基础环境变量。本篇文章讨论如何处理配置文件。即来自不同位置的配置属性,如&#xff1…

【Chat GPT】用 ChatGPT 运行 Python

前言 ChatGPT 是一个基于 GPT-2 模型的人工智能聊天机器人,它可以进行智能对话,同时还支持 Python 编程语言的运行,可以通过 API 接口进行调用。本文将介绍如何使用 ChatGPT 运行 Python 代码,并提供一个实际代码案例。 ChatGPT …

简单理解大模型参数高效微调中的LoRA(Low-Rank Adaptation)

[论文地址] [代码] [ICLR 22] 阅前须知:本博文可能有描述不准确/过度简化/出错的地方,仅供参考。 网络结构 其中,原有模型的参数是直接冻结的,可训练参数只有额外引入的LoRA参数(由nn.Parameter实现)。 模型微调的本质 记网络原…

LabVIEW实现三相异步电机磁通模型

LabVIEW实现三相异步电机磁通模型 三相异步电动机由于经济和出色的机电坚固性而广泛用于工业化应用。这台机器的设计和驱动非常简单,但在控制扭矩和速度方面,它隐藏了相当大的功能复杂性。通过数学建模,可以理解机器动力学。 基于微分方程的…

【嵌入式学习笔记】嵌入式基础9——STM32启动过程

1.MAP文件浅析 1.1.MDK编译后生成的中间过程文件 1.2.Map文件构成: 程序段交叉引用关系(Section Cross References):描述各文件之间函数调用关系删除映像未使用的程序段(Removing Unused input sections from the im…

Netty学习(二)

文章目录 二. Netty 入门1. 概述1.1 Netty 是什么?1.2 Netty 的作者1.3 Netty 的地位1.4 Netty 的优势 2. Hello World2.1 目标加入依赖 2.2 服务器端2.3 客户端2.4 流程梳理课堂示例服务端客户端 分析提示(重要) 3. 组件3.1 EventLoop事件循…

【图像处理】使用 OpenCV 将您的照片变成卡通

图像到卡通 一、说明 在当今世界,我们被图像和视频所包围。从社交媒体到广告,图像已成为一种强大的交流媒介。但是你有没有想过,如果你能把你的照片变成卡通会发生什么?想象一下,为您最喜欢的照片创建动画版本&#xf…

express 路由匹配和数据获取

express配置路由只需要通过app.method(url,func)来配置,其中url配置和其中的参数获取方法不同 直接写全路径 路由中允许存在. get请求传入的参数 router.get("/home", (req, res) > {res.status(200).send(req.query); });通过/home?a1会收到对象…

Spark的DataFrame和Schema详解和实战案例Demo

1、概念介绍 Spark是一个分布式计算框架,用于处理大规模数据处理任务。在Spark中,DataFrame是一种分布式的数据集合,类似于关系型数据库中的表格。DataFrame提供了一种更高级别的抽象,允许用户以声明式的方式处理数据&#xff0c…

MyBatis-Plus

1.入门案例 1.1 pom依赖引用 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.3.1</version> </dependency><dependency><groupId>mysql</grou…

Pytorch深度学习-----神经网络的基本骨架-nn.Module的使用

系列文章目录 PyTorch深度学习——Anaconda和PyTorch安装 Pytorch深度学习-----数据模块Dataset类 Pytorch深度学习------TensorBoard的使用 Pytorch深度学习------Torchvision中Transforms的使用&#xff08;ToTensor&#xff0c;Normalize&#xff0c;Resize &#xff0c;Co…

python爬虫基础入门——利用requests和BeautifulSoup

(本文是自己学习爬虫的一点笔记和感悟) 经过python的初步学习,对字符串、列表、字典、元祖、条件语句、循环语句……等概念应该已经有了整体印象,终于可以着手做一些小练习来巩固知识点,写爬虫练习再适合不过。 1. 网页基础 爬虫的本质就是从网页中获取所需的信息,对网…

ClickHouse使用场景和案列分析

目录 一、ClickHouse 概述1. ClickHouse简介2. ClickHouse 发展历程3. ClickHouse 特点 二、ClickHouse 架构1. 数据存储层&#xff1a;2. SQL 解析层&#xff1a;3. 查询执行层&#xff1a;4. 数据压缩层&#xff1a; 三、ClickHouse 性能优化1. 查询优化&#xff1a;2. 数据压…

QT:qInstallMessageHandler打印日志重定向

目录 1、qInstallMessageHandler含义 2、实例&#xff1a; 3、调试级别Q包含用于警告和调试文本的全局宏&#xff1a; 4、打印日志&#xff0c;如何使用 1、qInstallMessageHandler含义 &#xff08;1&#xff09;此函数在使用Qt消息处理程序之前已定义。返回一个指向前一…