
STM32
文章平均质量分 63
STM32
Stig_Q
我认出风暴而激动如大海
展开
-
一文总结嵌入式【七大通信总线协议】
本文深入而全面地概述了嵌入式领域内七种经典串行通信协议:UART、RS232、RS485、I2C、SPI、CAN和I2S。这些协议能够适应不同的应用需求,包括通信速度、传输距离、系统复杂度和成本等多个方面。通过了解每种协议的核心特性和差异,可以为电子系统设计中选择最适宜的通信方式提供重要参考哦。转载 2024-07-31 14:39:37 · 134358 阅读 · 0 评论 -
热敏电阻阻值和ADC采集值的转换(附10K(3950)案例)
resistance = (float)(10000 * adc_value) / (4096 - adc_value);是根据电压分压原理和ADC的转换公式来的。假设温度传感器和一个10k欧姆的电阻串联,两端接5V电源,那么温度传感器的电阻值和输出电压之间有如下关系:原创 2024-06-25 11:18:49 · 6592 阅读 · 0 评论 -
常用的USB转串口驱动合集整理免积分下载
整理的开发中常用的驱动,自己备份,也分享给大家,不要积分USB转串口驱动FT232芯片版:点击下载CP210x芯片版:点击下载CH340芯片版:点击下载PL2303芯片版:点击下载下载器驱动ST-LINK:点击下载J-LINK:点击下载原创 2024-05-30 15:57:56 · 250713 阅读 · 0 评论 -
TIM1_CH1N和TIM1_CH1的区别
TIM1_CH1和TIM1_CH1N都是指TIM1定时器的通道1,但是它们之间有一些区别: 1. TIM1_CH1是指定时器的通道1的正常输出,TIM1_CH1N是指定时器的通道1的反相输出。 2. TIM1_CH1可以输出PWM信号,而TIM1_CH1N可以输出互补的PWM信号。 3. 在某些特殊的情况下,TIM1_CH1N可以用作输入捕获通道,而TIM1_CH1不能。 4. TIM1_CH1和TIM1_CH1N的输出极性可以通过TIM1_CCER寄存器配置。原创 2024-05-30 14:52:02 · 4687 阅读 · 0 评论 -
STM32CUBEMX 定时器的 Parameter Settings 具体参数配置解释
STM32CUBEMX 定时器的 Parameter Settings 具体参数配置解释原创 2024-05-30 13:55:45 · 250780 阅读 · 0 评论 -
STM32入门:TIM定时器PWM1模式与PWM2模式的比较
PWM1 模式:向上计数,当 TIMx_CNT < TIMx_CCRn 时,定时器 TIMx 的通道 n 为有效电平,否则为无效电平;向下计数,当 TIMx_CNT > TIMx_CCRn 时,定时器 TIMx 的通道 n 为无效电平,否则为有效电平 有效电平,否则为无效电平。PWM2 模式:向上计数,当 TIMx_CNT < TIMx_CCRn 时,定时器 TIMx 的通道 n 为无效电平;向下计数,当 TIMx_CNT > TIMx_CCRn 时,定时器 TIMx 的通道 n 为有效电平。转载 2024-05-30 13:23:45 · 2997 阅读 · 0 评论 -
STM32总线外设及挂载外设
1、AHB总线:(1)Flash 存储器;(2)DMA;(3)复位和时钟控制;(4)CRC;(5)以太网;(6)SDIO;2、APB2总线:(1)USART1;(2)高级控制定时器TIM1和TIM8;(3)模数转换器ADC1、ADC2、ADC3;(4)SPI1;(5)外部中断EXTI;(6)复用IO,AFIO;(7)通用IO:GPIOA~G;3、APB1总线:(1)定时器TIM2到TIM7;(2)RTC;(3)WDT看门狗;(4)SPI2 、SPI3;(5)USART原创 2024-05-29 14:44:09 · 1173 阅读 · 0 评论 -
Keil问题解决:结构体数组初始化,初始化后的值不是目标值
省流:使用的编译器为compiler version 6,切换为compiler version 5。结构体数组的值并不是初始化的值,好像是默认值。原创 2024-05-15 18:33:29 · 1506 阅读 · 0 评论 -
Keil手动安装编译器V5版本
新版的keil不会自动帮你安装V5版本的编译器,但是很多教程很多比赛所用单片机都是V5的编译器,所以用来开以前的或者开源的很多东西编译直接一大堆报错。原创 2024-05-15 18:32:06 · 3220 阅读 · 0 评论 -
STM32CubeMX生成代码时防止UTF-8乱码
所以解决的方法有三种:1、不要使用UTF-8编码。如果开发环境是多元的,要支持Windows、Linux、Mac OS X,那只能使用UTF-8编码。2、不要在STM32CubeMX生成的文件中写中文注释3、添加环境变量转载 2024-04-24 16:55:27 · 3689 阅读 · 0 评论 -
关于stm32cubemx时钟设置中css enable的作用
STM32已提供了一个时钟失常恢复机制(CSS),当系统选择HSE作系工作时钟,并打开了CSS功能后,当HSE由于外部原因而停震时,系统将自动切换到内部HSI运行,并产生NMI中断,于是可以在NMI中断中进行安全处理。原创 2024-04-23 18:32:04 · 1338 阅读 · 0 评论 -
【STM32】系统时钟RCC详解(超详细,超全面)
STM32本身十分复杂,外设非常多 但我们实际使用的时候只会用到有限的几个外设,使用任何外设都需要时钟才能启动,但并不是所有的外设都需要系统时钟那么高的频率,为了兼容不同速度的设备,有些高速,有些低速,如果都用高速时钟,势必造成浪费 并且,同一个电路,时钟越快功耗越快,同时抗电磁干扰能力也就越弱,所以较为复杂的MCU都是采用多时钟源的方法来解决这些问题。所以便有了STM32的时钟系统和时钟树转载 2024-04-23 18:24:37 · 9785 阅读 · 2 评论 -
聊聊内存那些事(基于单片机系统)
单片机的RAM和ROM单片机的ROM,叫只读程序存储器,是FLASH存储器构成的,如U盘就是FLASH存器。所以,FLASH和ROM是同义的。单片机的程序,就是写到FLASH中了。而RAM是随机读/写存储器,用作数据存储器,是在运行程序时,存放数据的。内存区内存主要分为:代码区、常量区、静态区(全局区)、堆区、栈区这几个区域。转载 2023-10-12 17:14:13 · 904 阅读 · 0 评论 -
51与STM32单片机架构(内核和片上外设)的区别汇总
单片微型计算机简称单片机,简单来说就是集CPU(运算、控制)、RAM(数据存储-内存)、ROM(程序存储)、输入输出设备(串口、并口等)和中断系统处于同一芯片的器件,在我们自己的个人电脑中,CPU、RAM、ROM、I/O这些都是单独的芯片,然后这些芯片被安装在一个主板上,这样就构成了我们的PC主板,进而组装成电脑,而单片机只是将这所有的集中在了一个芯片上而已(一个集成封装样式的芯片就是一台pc,不要把那个开发板电路板也算进去)。转载 2023-09-27 16:21:00 · 2165 阅读 · 0 评论 -
C/C++的四大内存分区和常量的存储位置
在理解C/C++内存分区时,常会碰到如下术语:数据区,堆,栈,静态存储区,静态区,常量区,常变量区,全局区,字符串常量区,静态常量区,静态变量区,文字常量区,代码区等等,初学者被搞得云里雾里。在这里,尝试捋清楚以上分区的关系。数据区包括:堆,栈,静态存储区。静态存储区包括:常量区(静态常量区),全局区(全局变量区)和静态变量区(静态区)。常量区包括:字符串常量区和常变量区。代码区:存放程序编译后的二进制代码,不可寻址区。原创 2023-09-26 17:13:56 · 1012 阅读 · 0 评论 -
C语言数组清零----使用memset函数
看着介绍其实函数作用非常简单,就是用于初始化,但是需要注意的是memset赋值的时候是按字节赋值,是将参数化成二进制之后填入一个字节。该值以 int 形式传递,但是函数在填充内存块时是使用该值的无符号字符形式。,根本不是你想要赋的值100,这也就解释了为什么数组中的元素的值都为1684300900。:是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法。给int类型的数组赋值,你给第一个字节的是一百,转成二进制就是。,而int有四个字节,也就是说,一个int被赋值为。原创 2023-09-07 17:14:39 · 275983 阅读 · 0 评论 -
C语言extern关键字用法和理解
一个c文件需要调用另一个c文件里的变量或者函数,而不能从.h文件中调用变量。详见下文1extern int a = 5与int a = 5意义是一样的,都是定义。而extern int a;是声明。但会产生一条警告。详见下文2对于函数而言,和引用变量是一样的,如果需要调用其他.c文件中的函数,在文件中的函数声明前加extern即可,不加extern而直接声明函数也可以,因为声明全局函数默认前面带有extern。详见下文3如果不想让其他.c文件引用本文件中的变量,加上static即可。详见下文4———原创 2023-09-07 16:50:06 · 521 阅读 · 0 评论 -
incomplete type is not allowed
在b.c文件中需要引入一个a.c中的结构体变量,,我在b.c中直接extern 这个结构体,,结果编译时报错error: #70: incomplete type is not allowed最后上网查找才知道结构体不能这样引入。当ertern一个数组时如果不定义数组大小是也会出现error: #70: incomplete type is not allowed这个错误。2.在a.c中定义这个结构体类型的变量。(也可以在a.h中定义结构体变量)1.在a.h中声明这个结构体,,(结构体实体要在.h文件中)原创 2023-09-07 16:44:33 · 8741 阅读 · 0 评论 -
【STM32】 DMA原理,步骤超细详解,一文看懂DMA
DMA,全称Direct Memory Access,即直接存储器访问。DMA传输将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。我们知道CPU有转移数据、计算、控制程序转移等很多功能,系统运作的核心就是CPU,CPU无时不刻的在处理着大量的事务,但有些事情却没有那么重要,比方说数据的复制和存储数据,如果我们把这部分的CPU资源拿出来,让CPU去处理其他的复杂计算事务,是不是能够更好的利用CPU的资源呢?转载 2023-09-06 14:08:03 · 2243 阅读 · 0 评论 -
STM32 HAL库函数——HAL_UART_RxCpltCallback()详解
HAL_UART_RxCpltCallback 是一个回调函数,用于在使用 HAL 库进行串口接收时处理接收完成事件。当使用 HAL_UART_Receive_IT 函数启动串口接收并且接收到指定数量的数据后,HAL 库会自动调用 HAL_UART_RxCpltCallback 函数。回调函数是一种特殊的函数,它在特定事件发生时由系统或库调用,而不是由程序显式调用。在这种情况下,当串口接收完成时,HAL 库会自动调用 HAL_UART_RxCpltCallback 函数。原创 2023-08-31 17:23:33 · 6204 阅读 · 0 评论 -
STM32CubeMX重新生成代码时,自己添加文件如何处理
用户自己添加的xxx.c文件,在CubeMX重新Generate文件时,不会被删掉。猜测CubeMX只是重新生成了例如eth.c,好了,现在芯片配置的代码已经同步过来了,工程文件还是用原来的,添加的文件就还在了,重新编译,ok。3. 进行你的配置,重新生成mdk工程(生成的之前mdk工程要打开)2. 打开cubemx工程,也就是ioc后缀文件。.c之类的文件,不会把用户自己添加的文件删掉。4. 点击最小化的mdk,然后可以看到提示框。更新xxx.c文件,选择是。更新xxx.h文件,选择是。原创 2023-08-31 15:26:21 · 2382 阅读 · 0 评论 -
STM32CubeMX 软件删除用户代码的问题解决
今天研究了一下stm32cubeMx 这个软件,若是stm32 的项目比较紧急,可以使用这个软件来生成驱动代码。至于在这个软件中的模块代码的选择,配置,我这里不会多说。满足软件配置后,在USER CODE BEGIN X ~ USER CODE END X 之间写自己代码就好了。自己的代码不会被删除的软件格式及配置方法。注意:这种自动化软件难免会出错,一定将自己代码与工程代码分开,以防不测。若是上面的没有配置,即使你把代码写在了USER CODE BEGINE 中也会被覆盖。原创 2023-08-31 15:07:23 · 15196 阅读 · 0 评论 -
PID控制算法原理
PID控制应该算是应用非常广泛的控制算法了。小到控制一个元件的温度,大到控制无人机的飞行姿态和飞行速度等等,都可以使用PID控制。这里我们从原理上来理解PID控制。PID(proportion integration differentiation)其实就是指比例,积分,微分控制。先把图片和公式摆出来,看不懂没关系。转载 2023-08-28 16:43:11 · 463 阅读 · 0 评论