库的区分
启动模式选择
NVIC
STM32每个GPIO都可以作为中断输入引脚
配置中断的步骤
DMA
stm32 hal库 pb3做普通io
__HAL_RCC_AFIO_CLK_ENABLE();__HAL_AFIO_REMAP_SWJ_NOJTAG();
//关闭JTAGDBGMCU-》CR &= ~((uint32_t)1《《5);
//关闭异步跟踪,否则PB3将一直读出0 memcpy是一个拷贝函数
USART-串口通讯
DMA-直接存储寄存器读取
DMA-USART1接发
RS-485通信
第33步USART驱动程序
DYS串口助手 V1
usrat.h
PA9、PA10对应的USART1
第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原理与驱动
第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摄氏度。
外部高速晶振