自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(2)
  • 收藏
  • 关注

原创 STM32F407由浮点数%f打印乱码牵扯出的栈溢出问题解决

最终定位到是由于局部变量大数组导致的栈溢出问题,进而程序异常导致的printf()函数打印浮点数出现乱码的问题。(1)回到3.1排查1的(4)小尝试,为什么勾选"Use MicroLIB"后就能正常打印浮点数?猜测是由于使用了比较小型的标准库,在调用printf("%f")打印浮点数时,没有访问到出错的位置,运气不错避开了,所以能够正常打印浮点数。(2)实际上,假如经常用到大数组,最好还是用动态内存分配,需要用到时就分配,用完就释放,保证RAM空间是足够使用且安全可控的。

2024-08-16 17:15:19 923

原创 工作笔记:4G模块使用过程关于strstr()与memcmp()函数用法

4G模块使用过程关于strstr()与memcmp()函数用法与相关问题说明与解决

2024-08-12 16:09:01 776

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. 在定时器中断服务中,对定时器状态标志位获取和清除,

2024-09-06

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

2024-09-06

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亮度越高

2024-09-06

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. 调用串口收发接口 串口传输状态获取

2024-09-06

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手册进行数据读写

2024-09-06

STM32F407基于标准库的软件IIC工程与学习笔记,需要时可进行参考学习

1. 空闲状态 SDA和SCL两条信号线都处于高电平,即释放总线。默认就是有上拉电阻空闲状态 2. 起始信号 SCL为高期间,SDA由高到低的跳变。 3. 停止信号 SCL为高期间,SDA由低到高的跳变。 启动信号和结束信号都是一种电平跳变时序信号,不是一种具体电平状态。 4. 应答信号 发送端向接收端发送8bit数据,释放总线,接收端在接收到数据后,在第9个时钟脉冲,向发送端发出特定的低电平脉冲,表示已收到数据。 5. 数据有效性 SCL为高时,SDA上的电平需要保持稳定,用于接收端进行读取。(开始和结束信号特殊) SCL为低时,SDA上的电平允许变化。

2024-09-05

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寄存器中。

2024-09-05

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)

2024-09-04

unicode编码和gbk编码之间进行相互转换的C语言代码 使用二分法进行查找

C语言实现unicode编码和gbk编码之间进行相互转换 使用二分法进行查找 提供两个表,一个是unicode转gbk,一个是gbk转unicode 可以相互进行转换

2024-09-03

STM32F407-USBH-FS-CDC与广和通4G模块USB通信,USB基础知识与驱动移植说明

适合人群:使用STM32F407与4G模块进行USB通信的开发人员 主要内容: USB基本概念与相关说明 USB驱动源码、参考资料来源与相关说明 ST官方USB-HOST-CDC主机库驱动移植 USB-CDC主机传输速度提升相关说明 其他测试验证内容说明 该内容是自己在工作过程中的经验积累和耐心整理,希望对你有用

2024-09-03

LoRa接收灵敏度,带宽和通信距离的关系,以SX1262为例进行说明

接收灵敏度是指无线设备正常工作所需的天线口最小信号接收功率。 系统间的干扰会导致无线设备灵敏度的下降,影响信号的正常接收,因此通常以无线设备灵敏度准则作为被干扰系统的保护准则。 公式(适用于LoRa通信): S = -174 + 10 * lg10(BW) + NF + SNR S:接收灵敏度,单位为dBm BW:带宽,单位为Hz NF:常数,只受硬件性能影响,比如SX1276的NF值为6dB SNR:解调所需最小信噪比,SF7时,SNR为-7.5dB 信噪比越大,说明产生的噪声(无用信号或干扰信号)越小,而有用的信号越多,接收端能够正确解调的成功率就越高。所以,信噪比越大,乱码或者丢包概率低,而信噪比越小,乱码或者丢包概率高。 带宽越大或者扩频因子越小时,即传输速率越快时,接收灵敏度越低(即数值越大),接收性能越弱,因此传输距离也比较短。

2024-09-03

STM32F407 USB主机 OTG-HS接口 CDC设备

单片机使用STM32F407 USB主机 OTG_HS接口,使用的是内部的FS全速USB,因此速度依然为全速12Mb/s 可接入支持USB2.0的CDC设备

2024-09-03

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除