STM32F407基于标准库的定时器中断工程与学习笔记,实现基本的定时中断功能
定时器中断实验:
1. 定时器初始化
(1)设置自动重装载值ARR,当前设置为5000-1,因为从0开始,所以要-1
自动重装载值可以是16位或32位,则ARR最大为2^16或2^32
(2)设置定时器预分频系数PSC,当前设置为8400-1
因此定时器时钟CK_CNT = CK_PSC /PSC = 84M / 8400 = 10kHz
也就是每个计数周期为1/10000=0.1ms
完整定时时间 = 5000 * 0.1ms = 500ms,时间到,产生中断
公式为:溢出时间(秒)= Tout(s) = (ARR+1) * ( (PSC+1) / CK_PSC ) CK_PSC即84MHz
(3)设置向上计数模式
(TIM_ClockDivision:输入捕获时才用到,TIM_RepetitionCounter高级定时器用法)
2. 配置定时器NVIC中断优先级分组
3. 定时器中断使能,使能定时器
4. 计数器向上计数溢出后,产生中断
5. 在定时器中断服务中,对定时器状态标志位获取和清除,
STM32F407基于标准库的输入捕获工程与学习笔记,实现获取脉冲周期与频率功能
输入捕获实验:
1. 初始化定时器,用于计算脉冲溢出多少次,重装载值为ARR
2. 初始化输入捕获相关参数
(1)选择为输入捕获
(2)IC1映射到TI1上
(3)不分频
(4)不滤波
(5)允许更新中断,允许CCITE捕获中断
3. 使能定时器,同时也使能了输入捕获功能
4. 高电平宽度基本计算逻辑:
(1)设置为上升沿触发,捕获到上升沿,清除输入捕获寄存器计数值
(2)设置为下降沿触发
(3)在下降沿触发前,一直累计定时器溢出的次数N
(4)捕获到下降沿,获取输入捕获计数值C
(5)高电平总的计数值Cnt = N*ARR + C
(6)计数值转换为时间T = Cnt * 1us
实验中,设置ARR重装载值为32位0XFFFFFFFF
84分频,因此定时器每个定时周期 = 84M / 84 = 1M = 1us
STM32F407基于标准库的定时器PWM工程与学习笔记,实现PWM调节LED亮度功能
PWM输出实验:
使用PF9引脚,TIM14通道1输出PWM,连接到PF9上的LED灯,可以控制LED灯亮度
1. 初始化定时器
2. 初始化PWM模式
(1)PWM模式
(2)使能比较输出
(3)输出极性:有效电平为低电平
3. 使能TIM14在CCR1上的预装载寄存器
4. ARPE使能
5. 使能定时器
6. 设置不同的CCR1值,也就是捕获/比较值,用于控制PWM的高低电平占空比。
7. PWM低电平期间,LED亮,低电平时间越长,则LED亮度越高
STM32F407基于标准库的串口UART工程和学习笔记,实现基本的串口收发功能
UART特点:
(1)全双工通信
(2)可配置波特率
(3)可配置16倍过采样或8倍过采样,有更多的速度容差和时钟容差灵活配置
(4)可配置数据字长:8、9位
(5)可配置停止位:1、1.5、 2位,奇偶校验位
(6)可配置DMA多缓冲器
(7)可单独配置发送和接收使能器
(8)状态监测:①接收缓冲器②发送缓冲器为空③传输结束标志
(9)多个带标志的中断源,触发中断
(10)校验控制,4个错误检测标志
串口实验步骤:
1. 串口参数初始化
(1)数据字长、停止位、奇偶校验位
(2)关闭硬件流控制
(3)波特率
(4)发送与接收都使能
2. 使能串口
3. 配置接收完成中断
4. 编写中断服务函数,NVIC配置
5. 调用串口收发接口
串口传输状态获取
STM32F407基于标准库的SPI工程与学习笔记,实现SPI读写W25Q128外部flash功能
STM32F4的SPI特点:
(1)8位或16位数据传输
(2)支持主从模式
(3)波特率预分频系数
(4)可编程时钟极性和相位
(5)可编程MSB和LSB
(6)可配置发送和接收完成中断
(7)可配置硬件CRC
(8)支持DMA发送接收1个字节
实验:使用SPI读写W25Q128外部flash。
1. 初始化SPI相关参数
(1)全双工
(2)主机模式
(3)8位数据结构
(4)CPOL设置SCK空闲时为高,CPHA设置SCK第二个边沿采样
SPI波特率 = APB2时钟/分频系数 = 84M / 256 = 328kHz
(5)NSS软件管理
(6)波特率预分频系数为256
(7)MSB,高位先发
(8)CRC多项式为7
2. 使能SPI
3. SPI发送接收一个字节数据
查看SPI传输状态,发送完成,接收完成
按照W25Q128手册进行数据读写
STM32F407基于标准库的软件IIC工程与学习笔记,需要时可进行参考学习
1. 空闲状态
SDA和SCL两条信号线都处于高电平,即释放总线。默认就是有上拉电阻空闲状态
2. 起始信号
SCL为高期间,SDA由高到低的跳变。
3. 停止信号
SCL为高期间,SDA由低到高的跳变。
启动信号和结束信号都是一种电平跳变时序信号,不是一种具体电平状态。
4. 应答信号
发送端向接收端发送8bit数据,释放总线,接收端在接收到数据后,在第9个时钟脉冲,向发送端发出特定的低电平脉冲,表示已收到数据。
5. 数据有效性
SCL为高时,SDA上的电平需要保持稳定,用于接收端进行读取。(开始和结束信号特殊)
SCL为低时,SDA上的电平允许变化。
STM32F407基于标准库的DAC工程与学习笔记,可进行参考学习
DAC实验:
将DAC输出引脚PA4与ADC输入引脚PA5连接。
设置DAC数字量,输出模拟量到ADC引脚上,ADC将模拟量转换为对应的ADC数字量。
1. 初始化DAC通道
(1)不使用外部触发功能
(2)不使用波形产生
(3)屏蔽幅值设置
(4)关闭输出缓冲
2. 使能DAC通道
3. 设置12位右对齐数据格式的DAC值
根据公式:DAC引脚模拟量输出DACoutput = VREF * (DOR/4095)
比如希望DAC引脚模拟量输出3.3V:
DACoutput = 3.3,VREF=3.3,求DOR,即设置的DAC值
DOR = DACoutput / VREF * 4095
= 3.3/3.3 * 4095
= 4095
将4095写入到DAC的DAC_DHRx寄存器中。
STM32F407标准库ADC工程与学习笔记,可以进行参考学习
1. 配置通用ADC控制器
(1)设置独立模式
(2)设置两个采样阶段之间的延迟周期数:
ADC_TwoSamplingDelay_5~20 Cycles,设置为5,延时5个时钟周期
其实是双重和三重ADC下才会用到,这里配置了但没用
(3)不使用DMA
(4)ADC 预分频:设置4分频,ADC1时钟频率ADCCLK不能超过36MHz,否则不准确
ADCCLK=PCLK2的4分频=84/4=21MHz
2. 设置某路ADC的参数
(1)设置12位分辨率
(2)非扫描模式
(3)单次转换模式,关闭连续转换模式
(4)禁止外部触发方式,使用软件触发
(外部触发的话可以是定时器触发或者某个外部中断引脚)
(5)数据右对齐
(6)1个转换在规则序列中(单通道单次转换,所以转换1次即可)
实现功能
(1)配置好之后,使能ADC
(2)配置规则通道参数,1个序列,设置采样时间设置480个周期
(3)启动软件转换
(4)判断状态寄存器标志位,是否转换结束
(5)转换结束,获取转换结果,读取ADC值
(6)将ADC值adc_val转换为实际电压值,单位V。(假如3.3改为3300,则单位mV)
unicode编码和gbk编码之间进行相互转换的C语言代码
使用二分法进行查找
C语言实现unicode编码和gbk编码之间进行相互转换
使用二分法进行查找
提供两个表,一个是unicode转gbk,一个是gbk转unicode
可以相互进行转换
STM32F407-USBH-FS-CDC与广和通4G模块USB通信,USB基础知识与驱动移植说明
适合人群:使用STM32F407与4G模块进行USB通信的开发人员
主要内容:
USB基本概念与相关说明
USB驱动源码、参考资料来源与相关说明
ST官方USB-HOST-CDC主机库驱动移植
USB-CDC主机传输速度提升相关说明
其他测试验证内容说明
该内容是自己在工作过程中的经验积累和耐心整理,希望对你有用
LoRa接收灵敏度,带宽和通信距离的关系,以SX1262为例进行说明
接收灵敏度是指无线设备正常工作所需的天线口最小信号接收功率。
系统间的干扰会导致无线设备灵敏度的下降,影响信号的正常接收,因此通常以无线设备灵敏度准则作为被干扰系统的保护准则。
公式(适用于LoRa通信):
S = -174 + 10 * lg10(BW) + NF + SNR
S:接收灵敏度,单位为dBm
BW:带宽,单位为Hz
NF:常数,只受硬件性能影响,比如SX1276的NF值为6dB
SNR:解调所需最小信噪比,SF7时,SNR为-7.5dB
信噪比越大,说明产生的噪声(无用信号或干扰信号)越小,而有用的信号越多,接收端能够正确解调的成功率就越高。所以,信噪比越大,乱码或者丢包概率低,而信噪比越小,乱码或者丢包概率高。
带宽越大或者扩频因子越小时,即传输速率越快时,接收灵敏度越低(即数值越大),接收性能越弱,因此传输距离也比较短。
STM32F407 USB主机 OTG-HS接口 CDC设备
单片机使用STM32F407
USB主机
OTG_HS接口,使用的是内部的FS全速USB,因此速度依然为全速12Mb/s
可接入支持USB2.0的CDC设备