STM32学习教程

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库,这么多库!你叫我怎么选?

库的区分

STM32学习教程_第1张图片

启动模式选择

STM32学习教程_第2张图片

NVIC

STM32每个GPIO都可以作为中断输入引脚
配置中断的步骤
在这里插入图片描述
STM32学习教程_第3张图片
在这里插入图片描述
STM32学习教程_第4张图片
STM32学习教程_第5张图片
STM32学习教程_第6张图片

DMA

STM32学习教程_第7张图片

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-串口通讯

STM32学习教程_第8张图片
STM32学习教程_第9张图片
STM32学习教程_第10张图片
STM32学习教程_第11张图片
STM32学习教程_第12张图片
STM32学习教程_第13张图片
STM32学习教程_第14张图片
STM32学习教程_第15张图片
STM32学习教程_第16张图片

DMA-直接存储寄存器读取

STM32学习教程_第17张图片

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
在这里插入图片描述
STM32学习教程_第18张图片
在这里插入图片描述

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

STM32学习教程_第19张图片

第35步USART接收程序

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

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

STM32学习教程_第20张图片
中断方式实时性好
打开串口中断
《STM32固件库使用手册》
STM32学习教程_第21张图片
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控制程序

STM32学习教程_第22张图片

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

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

usart.h

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

第49步I2C总线介绍

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

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

STM32学习教程_第25张图片
STM32学习教程_第26张图片
LM75A
STM32学习教程_第27张图片
高四位是固定的,最后一位是读写标志位
1001 1110——9E
lm75a.h

#define LM75A_ADD	0x9E	//器件地址

STM32学习教程_第28张图片
STM32学习教程_第29张图片
//LM75进入掉电模式

    I2C_SAND_BYTE(LM75A_ADD,0x01,1); 

STM32学习教程_第30张图片

void LM75A_GetTemp(u8 *Tempbuffer){  

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

第65步ADC原理与驱动

STM32学习教程_第31张图片

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

视频

第12讲 STM32F1 GPIO工作原理_batch

STM32学习教程_第32张图片
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

STM32学习教程_第33张图片
STM32学习教程_第34张图片
在这里插入图片描述
在这里插入图片描述
STM32学习教程_第35张图片
STM32学习教程_第36张图片

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

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

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

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

STM32学习教程_第37张图片
在代码里寻找IO口模式:
Go To Definition Of ‘…’

HAL_GPIO_Init
IS_GPIO_MODE

STM32学习教程_第38张图片

第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

最小系统板
STM32学习教程_第39张图片

DSD板
STM32学习教程_第40张图片
正点原子
STM32学习教程_第41张图片
SDA:数据线
SCL:时钟
STM32学习教程_第42张图片
STM32学习教程_第43张图片
空闲状态:I2C总线的SDA和SCL两条信号线同时处于高电平时,两条信号线各自的上拉电阻把电平拉高。
起始信号:当SCL为高期间,SDA由高到低。
停止信号:当SCL为高期间,SDA由低到高。
STM32学习教程_第44张图片
应答信号:
STM32学习教程_第45张图片

STM32学习教程_第46张图片
STM32学习教程_第47张图片
STM32学习教程_第48张图片
R/W:写0,读1
在这里插入图片描述

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

STM32学习教程_第49张图片
STM32学习教程_第50张图片
STM32学习教程_第51张图片
STM32学习教程_第52张图片
STM32学习教程_第53张图片

第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是发送使能信号(高电平有效)。
硬件连接(战舰)
STM32学习教程_第54张图片
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)闪存存储器接口寄存器,该部分用于控制闪存读写等,是整个闪 存模块的控制机构。

STM32学习教程_第55张图片
STM32学习教程_第56张图片

第68讲 FLASH模拟EEPROM实验-M3

第71讲 内存管理实验

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

其他

ST‐LINK调试STM32

STM32学习教程_第58张图片
STM32学习教程_第59张图片
STM32学习教程_第60张图片
STM32学习教程_第61张图片

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摄氏度。

外部高速晶振

STM32学习教程_第62张图片
STM32学习教程_第63张图片
STM32学习教程_第64张图片
STM32学习教程_第65张图片

你可能感兴趣的:(stm32,stm32)