STM32学习教程

2023-05-16

STM32学习教程

  • 【硬石电子】
    • 资料下载
    • 库的区分
    • 启动模式选择
    • NVIC
    • DMA
    • stm32 hal库 pb3做普通io
    • USART-串口通讯
    • DMA-直接存储寄存器读取
    • DMA-USART1接发
    • RS-485通信
  • 【洋桃电子】STM32入门100步
    • 第33步USART驱动程序
    • 第35步USART接收程序
    • 第36步USART控制程序
    • 第49步I2C总线介绍
    • 第65步ADC原理与驱动
  • 【正点原子】STM32开发板实验教程(F103)
    • 第12讲 STM32F1 GPIO工作原理_batch
    • 第25讲 串行通信原理讲解-UART_batch
    • 第24讲 NVIC中断优先级管理-M3
    • 第26讲 STM32串口寄存器库函数配置方法+手把手教你写串口通信实例-M3
    • 第28讲 外部中断实验-M3
    • 第32讲 定时器中断实验-TIMER - M3
    • 第34讲 输入捕获实验-TIMER-M3
    • 第52讲 I2C通信实验-M3_batch
    • 第53讲 SPI接口原理与配置-M3
    • 第55讲 485通信实验-M3_batch
    • 第67讲 FLASH闪存编程原理与步骤-M3
    • 第68讲 FLASH模拟EEPROM实验-M3
    • 第71讲 内存管理实验
  • 其他
    • ST‐LINK调试STM32
    • STM32F103命名规则
    • 外部高速晶振

双面板,不能做铝基板

【硬石电子】

资料下载

[硬石开发板] 硬石开源资料下载
【MCU】寄存器、标准库、HAL库、LL库,这么多库!你叫我怎么选?

库的区分

在这里插入图片描述

启动模式选择

在这里插入图片描述

NVIC

STM32每个GPIO都可以作为中断输入引脚
配置中断的步骤
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

DMA

在这里插入图片描述

stm32 hal库 pb3做普通io

__HAL_RCC_AFIO_CLK_ENABLE();
__HAL_AFIO_REMAP_SWJ_NOJTAG();		//关闭JTAG
DBGMCU->CR  &= ~((uint32_t)1<<5);  	//关闭异步跟踪,否则PB3将一直读出0 

memcpy是一个拷贝函数

USART-串口通讯

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

DMA-直接存储寄存器读取

在这里插入图片描述

DMA-USART1接发

//不使用DMA
	/* 不使用DMA传输数据到电脑端 */
HAL_UART_Transmit(&huart1,txbuf,strlen((char *)txbuf),1000);
    /* 使能接收,进入中断回调函数 */
HAL_UART_Receive_IT(&huart1,&aRxBuffer,1);
/**
  * 函数功能: 串口接收完成回调函数
  * 输入参数: 无
  * 返 回 值: 无
  * 说    明:无
  */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle)
{
  HAL_UART_Transmit(&huart1,&aRxBuffer,1,0);
//	HAL_UART_Transmit_DMA(&huart1,aTxBuffer, SENDBUFF_SIZE); 
  HAL_UART_Receive_IT(&huart1,&aRxBuffer,1);
}
//使用DMA
    /* 使用DMA传输数据到电脑端 */
HAL_UART_Transmit_DMA(&huart1,aTxBuffer, SENDBUFF_SIZE); 
    /* 使能接收,进入中断回调函数 */
HAL_UART_Receive_IT(&huart1,&aRxBuffer,1);
/**
  * 函数功能: 串口接收完成回调函数
  * 输入参数: 无
  * 返 回 值: 无
  * 说    明:无
  */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle)
{
  HAL_UART_Transmit(&huart1,&aRxBuffer,1,0);
//	HAL_UART_Transmit_DMA(&huart1,aTxBuffer, SENDBUFF_SIZE); 
  HAL_UART_Receive_IT(&huart1,&aRxBuffer,1);
}

RS-485通信

【洋桃电子】STM32入门100步

视频

第33步USART驱动程序

DYS串口助手 V1
usrat.h
PA9、PA10对应的USART1
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#define EN_USART1 			1		//使能(1)/禁止(0)串口1
#define EN_USART2 			0		//使能(1)/禁止(0)串口2
#define EN_USART3 			0		//使能(1)/禁止(0)串口3

在这里插入图片描述

第35步USART接收程序

单片机接收数据有中断和查询两种方式
查询方式
关闭串口中断
usart.c

    USART_ITConfig(USART1, USART_IT_RXNE, DISABLE);//开启ENABLE/关闭DISABLE中断

在这里插入图片描述
中断方式实时性好
打开串口中断
《STM32固件库使用手册》
在这里插入图片描述
usat.c

void USART1_IRQHandler(void){ //串口1中断服务程序(固定的函数名不能修改)	
	u8 a;
	if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET){  //接收中断(接收到的数据必须是0x0d 0x0a结尾)		
		a =USART_ReceiveData(USART1);//读取接收到的数据
		printf("%c",a); //把收到的数据发送回电脑		  
	} 
} 

第36步USART控制程序

在这里插入图片描述

超级终端USART控制STM32开发板
配置方法
超级终端下载连接
打开文件—>新建连接,连接类型选平时择编译的端口,我这里是COM4
在这里插入图片描述
关闭连接 :点击右键然后关闭
在这里插入图片描述
全局变量
usat.c

u16 USART1_RX_STA=0;       //接收状态标记,

usart.h

extern u16 USART1_RX_STA;         		//接收状态标记,声名

第49步I2C总线介绍

发送两个字节的数据大概花时160us,硬件IIC的速度80us左右
在这里插入图片描述在这里插入图片描述
I2C的地址是由一个7位的16进制数表示,所以同一个I2C总线最多能挂载127个设备
在这里插入图片描述
STM32主设备地址自己设定(0Xc0)
i2c.h

#define HostAddress	0xc0	//总线主机的器件地址

在这里插入图片描述
在这里插入图片描述
LM75A
在这里插入图片描述
高四位是固定的,最后一位是读写标志位
1001 1110——9E
lm75a.h

#define LM75A_ADD	0x9E	//器件地址

在这里插入图片描述
在这里插入图片描述
//LM75进入掉电模式

    I2C_SAND_BYTE(LM75A_ADD,0x01,1); 

在这里插入图片描述

void LM75A_GetTemp(u8 *Tempbuffer){  

u8 *Tempbuffer 是定义了一个指向内存存储区的指针,访问数据的类型为u8(无符号单字节)

第65步ADC原理与驱动

在这里插入图片描述

【正点原子】STM32开发板实验教程(F103)

视频

第12讲 STM32F1 GPIO工作原理_batch

在这里插入图片描述
GPIO的8种工作模式详细介绍!

    GPIO_Initure.Pin=GPIO_PIN_0;            //PA0
    GPIO_Initure.Mode=GPIO_MODE_INPUT;      //输入
//    GPIO_Initure.Pull=GPIO_PULLDOWN;        //下拉
	GPIO_Initure.Pull=GPIO_PULLUP;          //上拉
    GPIO_Initure.Speed=GPIO_SPEED_FREQ_HIGH;//高速
    HAL_GPIO_Init(GPIOA,&GPIO_Initure);

STM32的I/O口的8种工作模式

第25讲 串行通信原理讲解-UART_batch

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第24讲 NVIC中断优先级管理-M3

抢占优先级相同的中断,高响应优先级不可以打断低响应优先级的中断。
系统代码执行过程中,只设置一次中断优先级分组
中断优先级分组函数:

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

第26讲 STM32串口寄存器库函数配置方法+手把手教你写串口通信实例-M3

在这里插入图片描述
在代码里寻找IO口模式:
Go To Definition Of ‘…’

HAL_GPIO_Init
IS_GPIO_MODE

在这里插入图片描述

第28讲 外部中断实验-M3

STM32的每个IO都可以作为外部中断输入。
STM32的中断控制器支持19个外部中断/事件请求:
线0~15:对应外部IO口的输入中断。
线16:连接到PVD输出。
线17:连接到RTC闹钟事件。
线18:连接到USB唤醒事件。

每个外部中断线可以独立的配置触发方式(上升沿,下降沿或者双边沿触发),触发/屏蔽,专用的状态位。
在这里插入图片描述

第32讲 定时器中断实验-TIMER - M3

第34讲 输入捕获实验-TIMER-M3

STM32 输入捕获工作过程
通过检测TIMx_CHx上的边沿信号,在边沿信号发生跳变(比如上升沿/下降沿)的时候,将当前定时器的值(TIMx_CNT)存放到对应的捕获/比较寄存器(TIMx_CCRx)里面,完成一次捕获。

第52讲 I2C通信实验-M3_batch

最小系统板
在这里插入图片描述

DSD板
在这里插入图片描述
正点原子
在这里插入图片描述
SDA:数据线
SCL:时钟
在这里插入图片描述
在这里插入图片描述
空闲状态:I2C总线的SDA和SCL两条信号线同时处于高电平时,两条信号线各自的上拉电阻把电平拉高。
起始信号:当SCL为高期间,SDA由高到低。
停止信号:当SCL为高期间,SDA由低到高。
在这里插入图片描述
应答信号:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
R/W:写0,读1
在这里插入图片描述

第53讲 SPI接口原理与配置-M3

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第55讲 485通信实验-M3_batch

485接口用缆线两端的电压差值来表示传递信号。
RS485仅仅规定了接受端和发送端的电气特性。它没有规定或推荐任何数据协议。
RS485总线最长可以传输1200m以上(速率 ≤100Kbps)一般最大支持32个节点,如果使用特制的485芯片,可以达到128个或者256个节点,最大的可以支持到400个节点。
理想情况下RS485需要2个匹配电阻,其阻值要求等于传输电缆的特性阻抗(一般为120Ω)。
收发器SP3485
在这里插入图片描述
图中A、B总线接口,用于连接485总线。RO是接收输出端,DI是发送数据收入端,RE是接收使能信号(低电平有效),DE是发送使能信号(高电平有效)。
硬件连接(战舰)
在这里插入图片描述
1)R19和R22是两个偏置电阻,用来保证总线空闲时,AB之间的电压差都会大约200mV,避免总线空闲时压差不定逻辑混乱。
2)两个485接口连接,A连接A,B连接B

第67讲 FLASH闪存编程原理与步骤-M3

在线编程(ICP)
通过JTAG/SWD协议或者系统加载程序(Bootloader)下载用户应用程序到微控制器中。
在程序中编程(IAP)
STM32允许用户在应用程序中重新烧写闪存存储器中的内容。然而,IAP需要至少有一部分程序已经使用ICP方式烧到闪存存储器中(Bootloader)

STM32的闪存模块由:主存储器、信息块和闪存存储器接口寄存器等3部分组成。
(1)主存储器,该部分用来存放代码和数据常数(如const类型的数据)。对于大容量产品,其被划分为256页,每页2K字节。注意,小容量和中容量产品则每页只有1K字节。从上图可以看出主存储器的起始地址就是0X08000000, B0、B1都接GND的时候,就是从0X08000000开始运行代码的。
(2) 信息块,该部分分为2个小部分,其中启动程序代码(系统存储器),是用来存储ST自带的启动程序,用于串口下载代码,当B0接V3.3,B1接GND的时候,运行的就是这部分代码。用户选择字节,则一般用于配置写保护、读保护等功能。
(3)闪存存储器接口寄存器,该部分用于控制闪存读写等,是整个闪 存模块的控制机构。

在这里插入图片描述
在这里插入图片描述

第68讲 FLASH模拟EEPROM实验-M3

在这里插入图片描述

第71讲 内存管理实验

malloc函数用于内存申请,free函数用于内存释放。
分块式内存管理——原理
在这里插入图片描述
分块式内存管理由内存池内存管理表两部分组成。
内存管理表的项值代表的意义:当该项值为0的时候,代表对应的内存块未被占用,当该项值非零的时候,代表该项对应的内存块已经被占用,其数值则代表被连续占用的内存块数。
内寸分配方向:是从顶底的分配方向。即首先从最末端开始找空内存。
最后的这个空内存块的地址返回指针p

其他

ST‐LINK调试STM32

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

STM32F103命名规则

对于STM32F103xxyy系列:
第一个x代表引脚数:T-36pin,C-48pin,R-64pin,V-100pin,Z-144pin;
第二个x代表Flash容量:6-32K,8-64K,B-128K,C-256K,D-384K,E-512K;
第一个y代表封装:H-BGA封装,T-LQFP封装,U-QFN封装;
第二个一代表工作稳定范围:6代表-40到85摄氏度,7代表-40到105摄氏度。

外部高速晶振

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32学习教程 的相关文章

  • 信号量与消息队列的区别

    出现信号量与消息队列的原因 xff1a 全局变量可以承载通信的内容 xff0c 但接受方任务需要不断检测此全局变量的值 所以产生了信号量与消息队列 信号量 xff1a 可以通知接收方某个事件的发生 xff0c 但无法传递具体事件内容 xff
  • <Unity>局部坐标(localPosition) && 世界坐标(Position)

    局部坐标 amp amp 世界坐标 的区别 1 官方文档介绍1 1 Transform Position1 2 Transform localPosition 2 问题2 1 Position真的不会受到父物体的影响吗 1 官方文档介绍 1
  • ADRC与Matlab/Similink/C++实现

    写在前面 ADRC控制算法主要分为三部分 xff0c 跟踪微分器TD 观测器ESO和状态误差反馈控制器 xff0c 其中控制器分为线性控制器PD和非线性状态误差反馈控制器NLSEF xff0c 观测器分为线性观测器LESO和非线性观测器NL
  • 状态空间方程MATLAB语句

    1 连续系统 xff08 1 xff09 使用系数矩阵获得传递函数 num den 61 ss2tf A B C D xff08 2 xff09 将传递函数写成因式分解 xff08 零极点 xff09 形式 z p k 61 ss2zp A
  • 力扣刷题

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 H指数 题目介绍一 实现思路方法一 xff1a 排序分析复杂度分析 方法二 xff1a 计数分析算法 复杂度分析 二 使用算法1 pyth
  • [markdown语法]公式篇--整理总结了常用的公式语法全

    一 公式部分 前言 行内公式 xff1a 公式 行间公式 xff1a 公式 1 1 常用符号标注 1 1 1 上下标 数学符号实际效果语法向量 a vec a
  • ubuntu mate18.04+树莓派4B+ROS安装详细教程

    前记 最近项目需要 xff0c 需要给树莓派4B 安装Ubuntu mate xff0c 本来是一件很简单的事情 xff0c 因为Ubuntu mate官网已经开始支持树莓派4B了 xff0c 但是实际操作后 xff0c 才发现烧录官方的桌
  • QGC参数表

    QGC parameters 1 Battery Callbration ParametersDetail含义BAT A PER VBattery current per volt A V 每伏电池电流BAT CAPACITYBattery
  • GAZEBO构建室外环境地图之创建高度图

    GAZEBO构建室外环境地图之创建高度图 前言下载真实地形数据处理下载好的高度图 前言 最近在搭建gazebo的室外仿真环境用于室外机器人的室外建图算法研究 xff0c 发现网上说这方面的文章非常少 xff0c 走dem来创建地形的路 xf
  • [无人机学习]无人机学习概论

    一 无人机简介 1 1 无人机与航空模型分类 机型优点缺点固定翼飞机续航时间长 xff0c 速度快需要跑道 xff0c 不能垂直起降单旋翼飞机可以垂直起降 xff0c 空中悬停续航时间段 xff0c 机械结构复杂 xff0c 操控难度大多旋
  • YOLO使用

    第一步 下载预训练模型 span class token builtin class name cd span darknet span class token function wget span https pjreddie com m
  • CMakeLists.txt文件编写

    重点 1 cmake版本要求 cmake minimum required VERSION 3 15 2 工程名 project algorithm 3 支持C 43 43 11标准 set CMAKE CXX STANDARD 11 4
  • [Eigen]

    Eigen 库学习笔记 参考原文为 xff1a https www cnblogs com rainbow70626 p 8819119 html 为了方便查看 xff0c 以防找不到 xff0c 所以写了这篇博客 目录 Eigen 矩阵定
  • 【1】嵌入式学习

    嵌入式学习 GitHub xff1a https github com Screw888 LearningNote git
  • ubuntu swap分区扩容

    span class token comment 将现有的swap内存移动到主内存 span span class token function sudo span swapoff a span class token comment 创建
  • 强推!!!解决UnicodeEncodeError: ‘gbk‘ codec can‘t encode character.....: illegal multibyte

    解决pycharm编码报错问题 困扰了好几天的编码问题终于得到了解决 xff0c 其实问题很简单 xff0c 当你用pycharm打开一个txt json csv文件时 xff0c 像下面这种 xff1a 明明已经指定了编码方式为utf 8
  • EC20模块AT指令MQTT连接阿里云IoT,HTTP接口来实现一型一密动态注册的流程。

    EC20模块AT指令MQTT连接阿里云过程 推荐 xff1a 使用移远BC28 模组对接阿里云 MQTT 嵌入式 lx121451的博客 CSDN博客 https blog csdn net lx121451 article details
  • FastStone Capture 9.3 汉化绿色便携版 - 极品屏幕截图工具

    FastStone Capture http blog sina com cn flyonzone 是一款极好用的图像浏览 编辑和截屏工具 xff0c 支持 BMP JPG JPEG GIF PNG TIFF WMF ICO 和 TGA 在
  • Keil5打开工程提示not found device解决方法

    keil5打开别人工程时 xff0c 提示 not found device xff0c 无法在程序内定位函数 当打开别人的工程时 xff0c 弹窗提示not found device xff0c 并且无法定位函数位置 xff0c 打开Op
  • Record: My CMakeLists

    1 设置需要的最小版本的cmake cmake minimum required VERSION 3 10 2 定义生成的项目名 project perceive tracking 3 1 设置cmake参数 set CMAKE CXX F

随机推荐