- 博客(396)
- 资源 (8)
- 收藏
- 关注
原创 单片机编程中浮点数转定点数Q15查找表的设计方法
大多数的MCU、DSP中的浮点数处理单元都是定点浮点数处理单元,处理定点数据会相当快,但是处理浮点数据就会非常慢。可以利用Q格式进行浮点数据到定点的转化,节约CPU时间。实际应用中,浮点运算大都时候都是既有整数部分,也有小数部分的。所以要选择一个适当的定标格式才能更好的处理运算。
2025-03-24 12:20:53
583
原创 警告warning: variable ‘**‘ set but not used [-Wunused-but-set-variable]的解决办法
在C或C++编程中,编译器警告“warning: variable '**' set but not used [-Wunused-but-set-variable]”表明你声明了一个变量**,并且在你的代码中给它赋了值,但是在之后的代码中并没有使用这个变量的值。这种做法通常是不必要的,因为它会增加代码的复杂性和可能的错误风险,同时也会导致编译器的警告。
2025-03-21 16:19:44
231
原创 警告warning: braces around scalar initializer的解决办法
/本例中必要的结构体、联合体定义//面板结构体类型定义//扫描按键结构体类型定义//输入信号//经滤波后的输入信号//当前键扫描的值//当前键边沿状态//MODE键滤波计数器//UP键滤波计数器//DOWN键滤波计数器/SHIFT键滤波计数器//SET键滤波计数器//UP键和DOWN键加速计数器//UP键和DOWN键加速等级//UP键和DOWN键加速等级计数器// 键值定义UPKEY = 1,//键状态定义//面板菜单结构体类型定义。
2025-03-21 15:49:16
476
原创 警告warning: missing braces around initializer [-Wmissing-braces]的解决办法
仅列举与本文相关的必要的定义/* 引用头文件 *//* 宏定义 常数类*///下限表示显示类别 上限表示显示需要的页数//下限//上限//功能码属性//功能码属性表长度//每组功能码长度//功能码属性表中每组首个功能码序号//H0B组在辅助功能码中定义//H0D组在辅助功能码中定义//辅助功能码/* 结构体变量类型定义 枚举变量类型定义 */01:停机设定 02:显示 03:保留参数//2 保留//3 0:直接由上限限制 1:参数由上限相关功能码限制。
2025-03-20 16:31:35
798
原创 警告“warning: ‘**‘ defined but not used [-Wunused-variable]”的解决办法
在C或C++编程中,编译器发出的警告“warning: '**' defined but not used [-Wunused-variable]”意味着定义了一个变量**,但是在代码中并没有使用这个变量。这种警告通常是编译器为了帮助开发者发现可能存在的代码冗余或不完整的地方而发出的。
2025-03-19 08:30:00
274
原创 警告 “variable ‘**‘ set but not used [-Wunused-but-set-variable]” 的解决办法
例如,警告 "variable 'Data_Read' set but not used [-Wunused-but-set-variable]" ,指的是变量 Data_Read 被赋值了,但是在程序的其他部分没有被使用。如果不确定一个变量是否应该被删除,可以暂时注释掉该变量的相关代码,然后重新编译检查是否有其他错误或警告,这可以帮助你理解该变量是否真的需要。如果注释掉后没有其他问题,那么这个变量可能是多余的。如果暂时不想删除或使用这个变量,但想关闭这个警告,可以使用编译器的特定指令来忽略这个警告。
2025-03-18 14:45:16
240
原创 细说C/C++的宏定义跨行连接符的使用方法
宏定义跨行连接符在C/C++编程中主要用于编写复杂的宏定义,以提高代码的可读性。当宏定义较长,写在一行不易于读懂时,可以使用跨行连接符 “\” 来指示连续的两行代码视为同一行宏定义。这样,编译器会将这两行代码视为一个整体进行处理。
2025-03-18 14:32:26
748
原创 细说STM32单片机软件触发设置DAC并在同一管脚上同时传递给ADC1和ADC2转换的方法
在配置STM32单片机的管脚时,有的管脚可以同时配置为多种功能,这种情况给使用单片机的人带来十分的便利。比如,STM32F407ZGT6单片机只有一个DAC模块,这个模块有2个输出通道DAC_OUT1、DAC_OUT2。其中,DAC_OUT1输出引脚是PA4,DAC_OUT2输出引脚是PA5。在配置PA4为DAC_OUT1后,配置窗口出现绿色的“+”号,可以同时配置这个引脚为ADC1_IN4、ADC1_IN4。
2025-02-27 16:30:37
665
原创 细说STM32F407单片机RS485收发通信实例及调试方法
MCU上的串口UART(USART)是逻辑电平(TTL或CMOS电平),在开发板上实现与串口助手之间的RS485通信,就是把单片机上的逻辑电平通过RS485物理层芯片转换为RS485电平。本文继续使用旺宝红龙开发板STM32F407ZGT6 KIT V1.0。本文的目的是通过MAX485物理层芯片把开发板上的USART3(PB10、PB11)逻辑电平转换为RS485电平,然后通过一条USB转RS485的转换线连接到串口助手上。
2025-02-26 17:16:30
999
原创 细说STM32F407单片机2个ADC使用DMA同步采集各自的1个输入通道的方法
本文将通过一个实例测试 STM32F407ZGT6使用2个ADC模块并通过DMA模式同步采集各自的1个通道的方法。当一个ADC只有一个输入通道,在转换结束后可以及时读出结果数据寄存器的内容。当一个ADC规则转换组有多个通道时,应该使用扫描转换模式(Scan Conversion Mode),ADC在转换完一个通道后立刻转换下一个通道,直到规则组内的通道序列转换完。并启用DMA模式。
2025-02-22 17:12:39
1437
原创 细说STM32F407单片机1个ADC使用DMA同时采集3个输入通道的方法
当ADC只有一个输入通道,在转换结束后可以及时读出结果数据寄存器的内容。当规则转换组有多个通道时,应该使用扫描转换模式(Scan Conversion Mode),ADC在转换完一个通道后立刻转换下一个通道,直到规则组内的通道序列转换完。规则转换只有一个转换结果数据寄存器,虽然可以设置在每个通道转换完之后就产生EOC事件中断,但是在多通道情况下,在EOC事件中断里读取转换结果数据可能是来不及的,更谈不上对数据进行显示或处理。因此,如果规则转换组有多个输入通道,应该使用DMA。
2025-02-22 10:48:56
1227
原创 细说STM32F407单片机RTC入侵检测和时间戳的原理及使用方法
本文将通过示例介绍 STM32单片机RTC时钟单元的的入侵检测和时间戳的原理及使用方法。本文将继续使用旺宝红龙开发板STM32F407ZGT6 KIT V1.0。本实例将引用本文作者写的其他文章作为参考文献。参考文章1:细说STM32F407单片机RTC的基本原理及闹钟和周期唤醒功能的使用方法-CSDN博客参考文章2:细说STM32F407单片机RTC的备份寄存器原理及使用方法-CSDN博客。
2025-02-13 17:16:28
1322
原创 细说STM32F407单片机RTC的备份寄存器原理及使用方法
本实例旨在介绍备份寄存器的作用。本实例继续使用旺宝红龙开发板STM32F407ZGT6 KIT V1.0。本实例将引用本文作者写的其他文章作为参考文献。参考项目:细说STM32F407单片机RTC的基本原理及闹钟和周期唤醒功能的使用方法-CSDN博客。
2025-02-13 14:35:38
1322
原创 细说STM32F407单片机RTC的基本原理及闹钟和周期唤醒功能的使用方法
本实例使用旺宝红龙开发板STM32F407ZGT6 KIT V1.0,使用闹钟A、闹钟B和周期唤醒功能,具有如下功能。使用32.768kHz的LSE时钟作为RTC的时钟源。系统复位时初始化RTC日期为2022-2-12,时间为10:10:10。每秒唤醒一次,在周期唤醒中断里读取当前日期和时间,并在串口助手上显示。将周期唤醒中断信号WUTF输出到复用引脚RTC_AF1(PC13),用杜邦线连接PC13和LED1的引脚PA6(在CubeMX中不要配置PA6。
2025-02-12 14:08:02
898
原创 细说STM32F407单片机电源低功耗StandbyMode待机模式及应用示例
完成这些检测后,在while循环中检测按键输入,在KeyRight键被按下后,启用SYS_WKUP引脚,然后调用函数HAL_PWR_EnterSTANDBYMode()进入待机模式。如果SYS_WKUP引脚已经被启用,即使没有进入待机状态,按一下KeyUp键也会被记录一次唤醒操作,那么在按下KeyRight键进入待机模式后会立即被唤醒。系统从待机模式唤醒后,不是从进入待机模式处的代码继续执行,而是整个系统复位,从头开始执行,所以其唤醒延迟时间就是复位阶段的时间。否则,在后面再进入待机模式后,会立刻被唤醒。
2025-01-21 11:05:52
1165
原创 细说STM32F407单片机电源低功耗StopMode模式及应用示例
本示例中设置的RTC唤醒周期是5s,所以,在发生RTC周期唤醒中断时系统会被唤醒,但是会先执行RTC中断的ISR,也就是会执行RTC周期唤醒回调函数HAL_RTCEx_WakeUpTimerEventCallback(),这个回调函数里读取RTC当前时间并显示在串口助手上。RTC中断的ISR退出后,再继续执行WFI指令后面的程序。在进入while循环之前,调用了函数HAL_PWREx_EnableFlashPowerDown(),这可以在MCU进入停止模式后,关闭Flash存储器的电源,进一步降低功耗。
2025-01-20 16:53:58
1255
原创 细说STM32F407单片机电源低功耗SleepMode模式及应用示例
电池供电的嵌入式系统一般非常注意功耗控制,尽量使系统的功耗最低。STM32F4系列MCU提供了多种运行模式,CubeMX也提供了功耗分析的功能。本文介绍STM32F4的SleepMode功耗模式,以及如何通过该功耗模式的控制实现系统的低功耗。
2025-01-18 14:29:36
1433
原创 细说STM32F407单片机窗口看门狗WWDG的原理及使用方法
窗口看门狗(Window Watchdog,WWDG)是STM32F407上的另一个看门狗,通常用来监测由外部干扰或不可预见的逻辑条件造成的应用程序软件故障。
2025-01-16 16:02:11
1185
原创 细说STM32F407单片机独立看门狗IWDG的原理及使用方法
看门狗(Watchdog)就是MCU上的一种特殊的定时器,用于监视系统的运行,在发生错误(例如程序出现死循环)时,能自动使系统复位。STM32F407上有1个独立看门狗和1个窗口看门狗,这两个看门狗的作用不一样。
2025-01-15 15:24:53
1362
原创 细说STM32F407单片机以DMA方式读写外部SRAM的方法
本文作者旨在介绍如何使用DMA方式读写外部SRAM。继续使用旺宝红龙开发板STM32F407ZGT6 KIT V1.0。参考文章:细说STM32F407单片机以轮询方式读写外部SRAM的方法-CSDN博客原理图,详见参考文章。
2025-01-09 09:24:17
1025
原创 细说STM32F407单片机以轮询方式读写外部SRAM的方法
本文介绍STM32F407单片机以轮询方式读写外部SRAM IS61LV25616AL的方法。继续使用旺宝红龙开发板STM32F407ZGT6 KIT V1.0。关于 IS61LV25616AL,可以详见参考文章1。参考文章1:细说STM32F407单片机FSMC连接外部SRAM的方法及HAL驱动-CSDN博客参考文章2:细说STM32F407单片机轮询方式读写SPI FLASH W25Q16BV_stm32f407 spiflash驱动程序-CSDN博客。
2025-01-07 15:57:12
1273
原创 细说STM32F407单片机FSMC连接外部SRAM的方法及HAL驱动
本文介绍STM32F407单片机FSMC连接外部SRAM及以轮询方式读写外部SRAM的方法。本文将继续使用旺宝红龙开发板STM32F407ZGT6 KIT V1.0。FSMC的Bank1除能连接TFT LC外,还可以用于连接外部的SRAM、NOR FLASH、PSRAM等存储器。STM32F407ZG有192KB的SRAM存储器,一般的应用程序足够用了,但是在使用GUI等需要大量内存的功能时,就需要扩展SRAM了。
2025-01-06 11:05:57
1362
原创 细说STM32F407单片机中断方式CAN通信
在实际的CAN通信中,使用轮询方式发送消息,使用中断方式接收消息更加实用和普遍。本实例设计一个CAN通信,使用中断方式接收消息,并且测试在两个FIFO上使用不同的筛选器。本实例仍然使用使用旺宝红龙开发板STM32F407ZGT6 KIT V1.0。需要参考本文作者的其他文章:参考文件1: 细说STM32F407单片机轮询方式CAN通信_stm32f407can波特率配置表-CSDN博客参考文件2:细说STM32F407单片机CAN基础知识及其HAL驱动程序-CSDN博客。
2025-01-03 17:13:41
1097
原创 细说STM32F407单片机轮询方式CAN通信
本文实例的动作说明:使用开发板上的按键S2、S3,按下S2后,发送一个数据帧,按下S3后,发送一个遥控帧。开发板上的LED1、LED2,依次响应按键的动作。按下S6后,开发板复位。使用CAN测试模式中的回环模式,进行自发自收的测试。设置筛选器组,只接收消息ID为奇数的消息。使用轮询方式接收数据。开发板上CAN收发器型号是VD230。相关跳线的操作在这里省略10000字。
2024-12-31 17:01:12
1174
原创 细说STM32F407单片机CAN基础知识及其HAL驱动程序
STM32F4系列器件上有两个基本扩展CAN,支持2.0A和2.0B的CAN协议。两个CAN外设是CAN1和CAN2,称它们为CAN模块。STM32F4系列器件的两个CAN模块的结构如图所示。CAN1是带有512字节SRAM的主CAN控制器,CAN2无法直接访问SRAM存储器,是从CAN控制器。两个CAN控制器共享512字节SRAM。波特率最高为1Mbit/s。每个CAN模块有3个发送邮箱,可自动重发。具有16位自由运行的定时器,可以定时触发通信,可以在最后两个数据字节发送时间戳。
2024-12-30 17:10:08
1236
原创 细说STM32F407单片机通过IIC读写EEPROM 24C02
本文旨在通过使用STM32F407的IIC总线读写 EEPROM 24C02。
2024-12-25 17:03:55
730
原创 细说STM32F407单片机IIC总线基础知识
I2C(Inter-Integrated Circuit)接口,有时也写作IIC或I²C接口,是一种串行数字总线接口。I2C接口只有2根信号线,总线上可以连接多个设备,硬件实现简单,可扩展性强。I2C接口主要用于通信速率要求不高,以及多个器件之通信的应用场景。本文使用的开发板:旺宝红龙STM32F407ZGT6 KIT V1.0。
2024-12-25 13:32:27
1407
原创 细说STM32F407单片机DMA方式读写SPI FLASH W25Q16BV
SPI接口具有发送和接收两个DMA请求,在大数据量传输时,使用DMA效率更高,比如,一次写入一个扇区的数据。参考本文作者写的其他文章:细说STM32F407单片机轮询方式读写SPI FLASH W25Q16BV-CSDN博客本文目的:对照参考文章的需求,把读、写FLASH操作修改为通过DMA方式。其它不变。硬件开发板同参考文章。
2024-12-23 14:00:37
967
1
原创 细说STM32F407单片机轮询方式读写SPI FLASH W25Q16BV
本文旨在说明STM32F407单片机通过SPI1扩展FLASH W25Q16BV,对FLASH进行读ID、写操作、读操作、擦除操作。使用的是旺宝红龙开发板STM32F407ZGT6 KIT V1.0。使用开发板上的按键S2、S3、S4、S5、S6依此执行擦除芯片、擦除BLOCK0、写、读操作。使用开发板上的D2、D3、D4作为操作指示灯。通过串口USART3把操作状态显示到串口助手上。资源利用详见工程配置。工程里创建FLASH目录,包含w25flash.c、w25flash.h。
2024-12-20 08:53:10
1369
原创 细说Flash存储芯片W25Q128FW和W25Q16BV
如果一次写入的数据超过页的边界,会再从页的起始位置开始写。W25Q128的操作指令由1字节或多字节组成,指令的第1个字节是指令码,其后跟随的是指令的参数或返回的数据。一定要注意,在没有完全搞清楚状态寄存器各个位的意义和用法之前,请勿随便修改状态寄存器的内容,因为有些位是非易失的,有些位还是一次性编程的,修改状态寄存器的内容可能改变器件的特性,甚至造成器件无法再使用。"写数据"指令的起始地址可以是任意地址,数据长度也可以小于256,但如果写的过程中地址超过页的边界,就会从页的起始地址开始继续写。
2024-12-11 17:14:14
1729
原创 细说STM32F407单片机SPI基础知识
串行外设接口(Serial Peripheral Interface,SPI)是一种传输速率比较高的串行接口,一些ADC芯片、Flash存储器芯片采用SPI接口,MCU通过SPI接口与这些外围器件通信。以STM32F407ZGT6为例,细说其SPI基础知识。
2024-12-11 11:03:40
1878
原创 细说STM32单片机DAC以DMA方式输出自定义锯齿波并通过串口观察波形的方法
DAC自带的波形输出功能只能产生三角波和噪声波,若要输出自定义波形,使用DMA是比较好的方式。方法是,在DMA输出缓冲区里定义输出波形的一个完整周期的数据,然后用定时器触发DAC输出,每次触发时输出DMA缓冲区内的一个数据点,设置DMA工作模式为循环模式就可以输出连续的自定义波形。硬件资源请参考本文作者的其他文章: 细说STM32单片机用定时器触发DAC输出三角波并通过串口观察波形的方法-CSDN博客。使用DAC1的DMA输出功能,在PA4引脚输出连续的锯齿波。
2024-12-05 13:43:38
911
原创 细说STM32单片机用定时器触发DAC输出三角波并通过串口观察波形的方法
采用定时器TIM3的TRGO信号作为DAC1的触发信号,DAC1在触发信号驱动下输出三角波。通过MATLAB(或示波器)观察三角波的波形。使用的硬件开发板及其它资源,可以参考本文作者的文章:细说STM32单片机DAC基础及软件启动DAC触发并通过串口观察数据的方法-CSDN博客。
2024-12-03 17:18:04
1159
原创 细说STM32单片机DAC基础及软件启动DAC触发并通过串口观察数据的方法
DAC是数字量到模拟量的转换器。DAC可以由软件触发,也可以由定时器或外部中断信号触发。
2024-12-03 11:09:51
1573
原创 细说STM32单片机双ADC同步转换和DMA传输数据到Buffer并通过串口发送数据的方法
作者将在本文中通过实际例演示STM32单片机双ADC同步转换机制、通过DMA把采集到的数据发送到DMA Buffer中去,最后在ADC传输完成事件中断回调函数HAL_ADC_ConvCpltCallback()里,通过串口把转换的工程值发送到串口助手。可以参考本文作者的其他文章: 细说STM32单片机ADC规则组多通道输入和DMA传输数据到Buffer并通过串口发送数据的方法-CSDN博客。
2024-11-27 16:18:48
1037
原创 细说STM32单片机ADC规则组多通道输入和DMA传输数据到Buffer并通过串口发送数据的方法
在外设使用DMA时,建议尽量不开启外设的全局中断,若必须开启,也要禁止外设的主要事件源产生硬件中断,因为DMA的传输完成事件中断使用外设的回调函数,若开启外设的中断事件源,则可能导致一个事件发生时回调函数被调用两次。本例中建立一个工程,为规则组设置3个输入通道,使用扫描转换模式,通过DMA方式传输ADC转换结果数据。规则转换只有一个转换结果数据寄存器,虽然可以设置在每个通道转换完之后就产生EOC事件中断,但是在多通道情况下,在EOC事件中断里读取转换结果数据可能是来不及的,更谈不上对数据进行显示或处理。
2024-11-26 16:30:03
1467
原创 细说STM32单片机用定时器中断启动ADC转换并通过串口发送数据的方法
ADC可以使用定时器的触发输出(TRGO)信号或捕获比较事件信号作为ADC转换启动信号,而TRGO信号可以设置为定时器的更新事件(UEV)信号,也就是定时溢出信号,这样,每次ADC的采样间隔就是精确的了。
2024-11-25 17:15:51
796
原创 细说STM32单片机ADC基础及软件启动ADC转换并通过串口发送数据的方法
本文配置STM32单片机的ADC1,并利用printf()通过串口发送ADC1转换的工程值。本文使用的硬件开发板是ST的 NUCLEO-G474RE。板上的MCU型号关于开发法及其底板,可参考本文作者写的其他文章里的介绍。
2024-11-25 12:58:35
1358
STM32Cube高效开发教程基础篇第二部分 第20-22章
2025-01-13
《C++从入门到精通》第5版VS2022的例题
2023-05-12
《C语言从入门到精通》VS2022的例题
2023-04-12
profinet ASIC ERTEC200_Boot_Manual_V110
2022-05-17
Profinet ASIC ERTEC200芯片“ERTEC200_Datasheet_V112”
2022-05-17
西门子PLC S7-226固件程序,V2.01S7-226_CN_2.01_dump_24c512
2022-05-12
实测好用的两个Profilic PL2303HXA USB-to-Serial Comm Port for WIN10的驱动
2022-04-16
基于VB的分布式监控系统通信设计
2010-04-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人