stm32基础(代码片段)

-wenli -wenli     2022-12-02     104

关键词:

Stm32基础

 

初始化gpio函数

作用:初始化一个或者多个io口(同一组)的工作方式和速度
该函数主要是操作GPIO CRL(CRH)寄存器,在上拉或者下拉的时候有设置BSRR或者BRR寄存器

void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);

注意:外设(包括GPIO)在使用之前,几乎都要先使能对应的时钟

 

参数

第一个参数:

技术图片
GPIOA
GPIOB
GPIOC
GPIOD
GPIOE
GPIOF
GPIOG
可选参数

 

第二个参数为一个结构体,三个变量成员

技术图片

GPIO_Pin

技术图片
GPIO_Pin_0
GPIO_Pin_1
GPIO_Pin_2
GPIO_Pin_3
GPIO_Pin_4
GPIO_Pin_5
GPIO_Pin_6
GPIO_Pin_7
GPIO_Pin_8
GPIO_Pin_9
GPIO_Pin_10
GPIO_Pin_11
GPIO_Pin_12
GPIO_Pin_13
GPIO_Pin_14
GPIO_Pin_15
可选参数

GPIO_Speed

技术图片
GPIO_Speed_10MHz = 1,
GPIO_Speed_2MHz, 
GPIO_Speed_50MHz
可选参数

GPIO_Mode

技术图片
GPIO_Mode_AIN = 0x0,//模拟输入
GPIO_Mode_IN_FLOATING = 0x04,//浮空输入
GPIO_Mode_IPD = 0x28,//下拉输入
GPIO_Mode_IPU = 0x48,//上拉输入
GPIO_Mode_Out_OD = 0x14,//开漏输出
GPIO_Mode_Out_PP = 0x10,//通用推挽输出
GPIO_Mode_AF_OD = 0x1C,//复用开漏输出
GPIO_Mode_AF_PP = 0x18//复用推挽
可选参数

 

 示例

技术图片

 

 

读取输入电平函数

作用:读取某个GPIO的输入电平

实际操作的是GPIOx_IDR寄存器

uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); 

示例

技术图片

 

 

作用:读取某组GPIO的输入电平

实际操作的是GPIOx_IDR寄存器

uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx); 

示例

 技术图片

 

 

 

读取输出电平函数

作用:读取某个GPIO的输出电平

实际操作的是GPIO_ODR寄存器

uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

示例 

技术图片

 

作用:读取某组GPIO的输出电平

实际操作的是GPIO_ODR寄存器

uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);

示例

技术图片

 

 

设置输出电平函数

void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);

技术图片

跑马灯实验

led.h

技术图片
#ifndef __LED_H
#define __LED_H
void LED_Init(void);
   
#endif
代码

led.c

技术图片
#include "led.h"
#include "stm32f10x.h"
//在任何地方都要引用头文件stm32f10x.h,使用固件库必须要用到的头文件
void LED_Init(void)
    GPIO_InitTypeDef GPIO_InitStruct;//
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//使能gpioB的时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);//使能gpioA的时钟
    
    
    //初始化gpio
    GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;
    GPIO_InitStruct.GPIO_Pin=GPIO_Pin_5;
    GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_Init(GPIOB,&GPIO_InitStruct);//&取地址
    GPIO_SetBits(GPIOB,GPIO_Pin_5);//设置io输出低电平
    
    //初始化gpio
    GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;
    GPIO_InitStruct.GPIO_Pin=GPIO_Pin_5;
    GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_Init(GPIOE,&GPIO_InitStruct);//&取地址
    GPIO_SetBits(GPIOE,GPIO_Pin_5);//设置io口输出低电平
    
代码

main.c

技术图片
#include "stm32f10x.h"
#include "led.h"
#include "delay.h"

int main(void)

//初始延时
delay_init();
LED_Init();
    
    while(1)
    
    GPIO_SetBits(GPIOB,GPIO_Pin_5);
    GPIO_SetBits(GPIOE,GPIO_Pin_5);
    delay_ms(500);
        
    GPIO_ResetBits(GPIOB,GPIO_Pin_5);
    GPIO_ResetBits(GPIOE,GPIO_Pin_5);
    delay_ms(500);
    

代码

 

  

stm32f407开发板用户手册第15章stm32f429的gpio基础知识(重要)(代码片段)

...d&tid=93255第15章      STM32F429的GPIO基础知识(重要)本章教程为大家讲解GPIO(General-purposeI/Os)基础知识。GPIO配置是所有外设驱动的基础,大家务必要熟练掌握。15.1初学 查看详情

freertos移植stm32f407(代码片段)

...STM32F407获取FREERTOS源码从github上下载:FREERTOS源码创建基础工程1.利用Keil5创建一个STM32基础工程,建议直接使用任何一个STM32库模板。在基础工程中创建一个文件夹FREERTOS,用来存放FreeRTOS源码,该源码存放在下载的... 查看详情

canfd基础(代码片段)

目录哪些STM32有CANFD外设参考文档CAN-FD特性CAN-FD格式CAN2.0VSCAN-FDSTM32FDCAN外设特性位时间和采样点MessageRAM滤波器设置RxFIFORxBufferVSRxFIFOTxBuffer,TxFIFO,TxQueue操作模式收发器延迟补偿TDC时钟校准低功耗模式现有BxCAN升级到CANFD下一篇用起来... 查看详情

stm32h7教程第91章stm32h7的fdcan总线基础知识和hal库api(代码片段)

...d=viewthread&tid=86980第91章      STM32H7的FDCAN总线基础知识和HAL库API本章节为大家讲解FDCAN的基础知识和对应的HAL库API。CANFD中的FD含义就是flexibledata,灵活数据通信,且波特 查看详情

使用hal库开发stm32:timer基础说明与定时功能使用(代码片段)

文章目录目的Timer基础说明定时功能使用总结目的Timer是单片机中非常常见的一种外设组件,可以实现很多常用的功能,这篇文章就将对STM32中Timer的基础内容做个说明。Timer基础说明单片机中的Timer很多时候完整的表达是... 查看详情

使用hal库开发stm32:使用timer输出pwm信号(代码片段)

文章目录目的基础说明输出PWM信号总结目的单片机输出PWM信号是很常用的一种功能需求,STM32中通常使用Timer来输出PWM信号,这篇文章将对相关内容做个说明。基础说明在使用Timer输出PWM信号需要了解一些Timer的基础知识&#x... 查看详情

arm汇编基础基于keil创建stm32汇编程序的编写(代码片段)

文章目录一、新建项目(1)工具介绍(2)创建项目:二、配置环境(1)配置芯片(2)配置运行环境三、调试代码(这里选择使用的是仿真调试)(1)源代码(2)仿真设... 查看详情

stm32寄存器(代码片段)

...ef大小的内存空间typedefstruct__IOuint32_tCRL;//相当于在基地址基础上偏移0个字节0x00000804U//__IO实际是volatile,此处代表在基地址上偏移32位的地址内存,为易变的类型,所以此处取值每次都会访问内存__IOuint32_tCRH;//在基地址上偏移4个字节0... 查看详情

使用hal库开发stm32:adc基础使用(代码片段)

文章目录目的基础说明基础使用配置选项说明轮询单通道单次轮询单通道连续轮询多通道扫描中断单通道中断多通道扫描DMA单通道单轮DMA单通道连续DMA多通道连续总结目的ADC(模拟数字转换器)是现在单片机上基本都有... 查看详情

stm32-adc(独立模式双重模式)+dma读取数据+部分基础知识(代码片段)

文章目录一、ADC基础知识部分(一)ADC简介(二)ADC的功能框图二、结构体和固件库函数(一)ADC初始化结构体(二)ADC常用固件库函数三、ADC读取电压值(一)独立模式-单通道-中断读取&#... 查看详情

stm32h7教程第39章stm32h7的dmamux基础知识(重要)(代码片段)

...d&tid=86980第39章      STM32H7的DMAMUX基础知识(重要)本章教程为大家讲解DMAMUX(Directmemoryaccessrequestmultiplexer,直接存储器访问请求复用器),本章知识点非常重要,是掌握好DMA1,DMA2和BDMA的关键一步。39.1... 查看详情

正点原子stm32(基于hal库)1(代码片段)

...TM32命名规则STM32选型STM32设计数据手册最小系统IO分配STM32基础知识入门STM32F103系统架构CortexM3内核&芯片STM32系统架构存储器映射寄存器基础知识寄存器映射STM32启动过程分析启动模式(sct文件)启动文件分析(startup_stm32xxx.s)启动文... 查看详情

stm32移植freertos(图文实操)(代码片段)

...统2、可剥夺型内核3、Freertos系统简介二、FreeRTOS移植1.在基础工程种新建Freertos文件夹,并且将源码添加到这个文件夹中。2.在poertable文件夹中保留keil、MemMang、和RVDS,其他删除3.在基础工程中新建分组FreeRTOS_CODE和FreeRTOS_PORTTABLE... 查看详情

stm32移植freertos(图文实操)(代码片段)

...统2、可剥夺型内核3、Freertos系统简介二、FreeRTOS移植1.在基础工程种新建Freertos文件夹,并且将源码添加到这个文件夹中。2.在poertable文件夹中保留keil、MemMang、和RVDS,其他删除3.在基础工程中新建分组FreeRTOS_CODE和FreeRTOS_PORTTABLE... 查看详情

stm32驱动模数转换芯片ads1120(1-基础知识篇)(代码片段)

1.先看下ADS1120的结构图,ADS1120是个比较奇葩的ADC模数转换器,因为比较适用于热电阻之类的温度采集器。看下图,有个MUX多路复用器,应该是选择两个差分信号去测试,通过输入多路复用器(MUX)实现的两个差分输入或四个单端输... 查看详情

基于stm32的串口/蓝牙控制led灯的开关和亮度(超基础)(代码片段)

...出更方便接线)理论支持1.串口通信(最常用且最基础的通讯,这里不展开)2,PWM脉宽调制脉冲宽度调制脉冲宽度调制(PWM), 查看详情

stm32hal库串口使用笔记(代码片段)

...程以及串口相关函数,来让大家了解STM32HAL库串口的基础使用方法。一.串口收发工程讲解1.使用STM32CubeMX新建一个工程2.如下图选择自己现有的STM32开发板进行开发:3.配置时钟源如果选择使用外部高速时钟(HSE)&#x... 查看详情

第3版emwin教程第4章emwin上手之stm32h7ltdc基础知识(代码片段)

...hp?mod=viewthread&tid=98429第4章  emWin上手之STM32H7LTDC基础知识本章教程为大家讲解LTDC应用中最基本的汉字显示和2D图形显示功能实现。4.1初学者重要提示4.2LCD相关的基础支持4.3LCD硬件设计4.4LCD驱动设计4.5LCD板级支持包(bsp_ 查看详情