道亦无名
王阳明曰: 立志 勤学 改过 择善
我曰: flag practice debug release
展开
-
STM32的IAP
STM32的IAP(In-Application Programming,在应用编程)地址主要涉及IAP程序本身的存储地址以及它所要操作的应用程序(APP)的存储地址。这些地址通常与STM32的FLASH存储器映射相关,并且可以根据具体的STM32型号和IAP程序的设计进行调整。原创 2024-08-27 20:33:50 · 506 阅读 · 0 评论 -
STM32判断休眠
STM32是否进入休眠模式(或称为睡眠模式)的判断主要基于其功耗状态、内部时钟的关闭情况以及唤醒后的行为。判断STM32是否进入休眠模式可以通过观察其功耗状态、时钟关闭情况、唤醒后的行为以及使用特定函数或指令等方法来实现。同时,还可以利用调试工具进行实时验证。原创 2024-07-17 17:29:57 · 951 阅读 · 0 评论 -
STM32注入通道
注入通道是ADC的一种采样方式,主要用于在规则通道转换期间并行处理快速变化信号的采样。注入通道的转换可以在规则通道转换时强行插入,相当于一个“中断通道”。当有注入通道需要转换时,规则通道的转换会停止,优先执行注入通道的转换,当注入通道的转换执行完毕后,再回到之前规则通道进行转换。在STM32中,注入通道可以通过设置注入通道的规则通道组和注入通道的触发源、配置注入通道的转换参数以及开启注入通道的转换等步骤来实现。需要注意的是,在实现注入通道时,需要根据具体的芯片规格和ADC使用指南进行相应的配置和编程。原创 2023-08-30 21:00:00 · 1384 阅读 · 0 评论 -
STM32 CRC寄存器
例如:如果输入0x44434241,内存中按字节存放的顺序是:0x41, 0x42, 0x43, 0x44。计算的结果是:0xCF534AE1。如果输入0x41424344,内存中按字节存放的顺序是:0x44, 0x43, 0x42, 0x41。复位CRC模块(设置CRC_CR=0x01),这个操作把CRC计算的余数初始化为0xFFFFFFFF。注意:虽然读写操作都是针对CRC_DR寄存器,但实际上是访问的不同物理寄存器。写完所有的数据字后,就可以从CRC_DR寄存器读出计算的结果。原创 2023-01-15 00:15:00 · 783 阅读 · 0 评论 -
STM32系列单片机GPIO的总结
(5)开漏输出_OUT_OD ——IO输出0接GND,IO输出1,悬空,需要外接上拉电阻,才能实现输出高电平。当输出为1时,IO口的状态由上拉电阻拉高电平,但由于是开漏输出模式,这样IO口也就可以由外部电路改变为低电平或不变。关于模拟输入&低功耗,根据STM32的低功耗AN(AN2629)及其源文件,在STOP模式下,为了得到尽量低的功耗,确实把所有的IO(包括非A/D输入的GPIO)都设置为模拟输入。(6)推挽输出_OUT_PP ——IO输出0-接GND, IO输出1 -接VCC,读输入值是未知的。原创 2023-01-07 00:00:00 · 1630 阅读 · 1 评论 -
STM32的定时器使用
TIM_IT_CC1 TIM捕获 / 比较1中断源。TIM_IT_CC2 TIM捕获 / 比较2中断源。TIM_IT_CC3 TIM捕获 / 比较3中断源。TIM_IT_CC4 TIM捕获 / 比较4中断源。TIM_IT_Update TIM中断源。原创 2023-01-11 00:00:00 · 132 阅读 · 0 评论 -
STM32 DMA使用总结2
通过TIMx的捕获功能将方波的电平跳变时刻记录在比较/捕获寄存器中,然后DMA将该值自动传输到内存,只有当DMA触发半满或全满事件时CPU才需要进入中断处理数据。测试中STM32系列微控制器工作在36 MHz,可产生出1路最高1.5 MHz的方波,可捕获1 MHz的方波,而此时CPU的执行几乎不受影响。这里采用DMA来实现方波的产生和捕获,极大地提高了系统的实时性和执行效率,减少了中断次数,节省了宝贵的资源。由此也可以看出,缓冲越大,对中断响应的实时性要求也越低,当然这时中断的处理时间也越长。原创 2023-01-08 00:00:00 · 526 阅读 · 0 评论 -
STM32 DMA的使用总结
当设置了DMA_CCRx寄存器中的MEM2MEM位之后,在软件设置了DMA_CCRx寄存器中的EN位启动DMA通道时,DMA传输将马上开始,当DMA_CNDTRx寄存器变为0时,DMA传输结束,存储器到存储器模式不能与循环模式同时使用。循环模式用于处理循环缓冲区和连续的数据传输(如ADC的扫描模式),在DMA_CCRx寄存器中的CIRC位用于开启这一功能,当启动了循环模式,数据传输的数目变为0时,将会自动地被恢复成配置通道时设置的初值,DMA操作将会继续进行。(1)、首先开启时钟。原创 2023-01-07 00:00:00 · 455 阅读 · 0 评论 -
【总结】STM32的外部中断EXIT
中断请求:当产生中断的时候,会执行对应的中断处理程序事件请求:当产生事件的时候,会想向其他模块发送触发信号,对于其他模块如何处理这个信号,则由模块自己决定!原创 2023-01-05 00:00:00 · 244 阅读 · 0 评论 -
stm32 PWM的配置
时钟设置:72M 使能TIM3和GPIOA。PORTA.7端口设置为复用推挽输出。中断优先级为最高 定时器3。原创 2023-01-04 00:00:00 · 133 阅读 · 0 评论 -
STM32 ADC学习
如果被ADC转换的模拟电压低于低阀值或高于高阀值,AWD模拟看门狗状态位被设置。注意:为了能够正确地配置每一个ADC通道,用户在调用ADC_Init()之后,必须调用ADC_ChannelConfig()来配置每个所使用通道的转换次序和采样时间。ADC通常要与DMA一起使用 这里只是简单的用库配置ADC 不断扫描来实现ADC的应用。也用一些默认的配置函数同GPIO 的一样例如:ADC_StructInit。这个程序的8位单片机风格很重,真正的ADC一定要放在DMA或是中断之中。原创 2023-01-03 23:00:00 · 104 阅读 · 0 评论 -
STM32 的 USB 控制器
PC主机和微控制器之间的数据传输是通过共享一专用的数据缓冲区来完成的,该数据缓冲区能被USB外设直接访问。这块专用数据缓冲区的大小由所使用的端点数目和每个端点最大的数据分组大小所决定,每个端点最大可使用512字节缓冲区,最多可用于16个单向或8个双向端点。USB模块同PC主机通信,根据USB规范实现令牌分组的检测,数据发送/接收的处理,和握手分组的处理。USB模块通过一个内部的16位寄存器实现端口与专用缓冲区的数据交换。在所有的数据传输完成后,如果需要,则根据传输的方向,发送或接收适当的握手分组。原创 2022-08-24 22:50:33 · 2241 阅读 · 0 评论 -
于 STM32 的 IAP 总结
整个过程按照如下步骤:关于解锁读/编程控制器叫"FPEC"有几个寄存器,专门负责 Flash 的,对这几个寄存器以一定得顺序访问并设置即可成功解锁Flash,至于怎么访问,谁先谁后,数据手册上写的头晕,直接来个快刀斩乱麻 Flash_UnLock()函数封装了这一系列的操作,有一点要注意,如果你是自己操作寄存器的话,如果操作的方法或者顺序不对都会造成 Flash 的锁定,之后的所有操作都会返回一个错误,直到下次启动后才能正常操作.关于保护,为了保护用户数据不被无意修改或者恶意读取,STM32 提供了对芯原创 2022-06-26 16:26:54 · 522 阅读 · 0 评论 -
STM32输入捕获
//TIM3 PWM部分初始化 //PWM输出初始化//arr:自动重装值//psc:时钟预分频数//TIM3 PWM部分初始化 //PWM输出初始化//arr:自动重装值//psc:时钟预分频数void TIM3_PWM_Init(u32 arr,u32 psc){ //此部分需手动修改IO口设置 GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructur原创 2021-04-19 17:14:44 · 817 阅读 · 0 评论 -
stm32获取cpu序列号
产品唯一的身份标识非常适合:● 用来作为序列号(例如USB字符序列号或者其他的终端应用)● 用来作为密码,在编写闪存时,将此唯一标识与软件加解密算法结合使用,提高代码在闪存存储器内的安全性。● 用来激活带安全机制的自举过程96位的产品唯一身份标识所提供的参考号码对任意一个STM32微控制器,在任何情况下都是唯一的。用户在何种情况下,都不能修改这个身份标识。这个96位的产品唯一身份标识,按照用户不同的用法,可以以字节(8位)为单位读取,也可以以半字(16位)或者全字(32位)读取。主要的代码如下:原创 2021-01-19 11:28:46 · 1300 阅读 · 0 评论 -
stm32F407的串口6卡死问题
环境操作系统:RT-Thread板子:STM32F407VET6现象UART1做控制台串口、UART6做通讯串口,但一旦使用UART6就会卡死,调试后发现程序卡死在函数static int stm32_putc(struct rt_serial_device *serial, char c)中的while (__HAL_UART_GET_FLAG(&(uart->handle), UART_FLAG_TC) == RESET);解决思路代码需要看stm32f4xx_hal_ms原创 2021-01-07 14:21:38 · 1966 阅读 · 0 评论 -
STM32的IO配置点灯
1、led.c的具体的代码:/*----------------------------------------------------------*/#include "led.h"/* -------------------------------------------------------------------------文件名:led.c描述 :根据硬件连接配置LED原创 2015-08-16 23:10:35 · 4197 阅读 · 0 评论 -
STM32的IO口配置
每个GPI/O端口有两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH),两个32位数据寄存器(GPIOx_IDR和GPIOx_ODR),一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR)。 GPIO端口的每个位可以由软件分别配置成多种模式。1、输入浮空2、输入上拉 3、输入下拉原创 2015-08-16 21:01:17 · 9161 阅读 · 0 评论 -
STM32的精确延时
/*----------------------------------------------------------文件名称:systick.c文件描述:sysTick 系统滴答时钟1us中断函数库,中断时间可自由配置备注:程序默认使用72M时钟,无分频-----------------------------------------------------------------*/原创 2015-08-21 00:13:23 · 4392 阅读 · 0 评论 -
STM32按键控制灯
纯干货/*----------------------------------------------------------------------------------文件名称:控制LED2,LED3闪烁硬件平台:STM32F103 开发板作者 :求是固件库 :V3.5-----------------------------------------------------原创 2015-09-11 23:38:41 · 5861 阅读 · 3 评论 -
STM32控制蜂鸣器
main.c具体的代码如下/*----------------------------------------------------------------------------------功能描述:普通延时控制LED2闪烁,间隔250ms,定时器控制蜂鸣器和LED3硬件平台:STM32F103 开发板作者 :求是07固件库 :V3.5---------------------原创 2016-08-21 15:12:57 · 23524 阅读 · 3 评论 -
Stm32串口控制
主函数的代码如下:/*----------------------------------------------------------------------------------功能描述:通过串口1,使用printf函数打印信息硬件平台:STM32F103 开发板作者 :求是07固件库 :V3.5--------------------------------------原创 2016-08-21 16:19:53 · 1350 阅读 · 0 评论 -
stm32的adc总结
在时间应用中对模拟信号的采集非常多,我们经常使用到的是ADC采集,模数转换。stm32自己带有adc采集接口,一些总结如下:原创 2018-06-05 21:16:24 · 3717 阅读 · 1 评论 -
stm32的串口调试卡死问题
且看这次出现的bug是一直等待,while(USART_GetFlagStatus(USE_Usart,USART_FLAG_TC)==RESET);这个有很多说法 不过本人处理的方法是加入了一个一行代码就好了NVIC_SetVectorTable(NVIC_VectTab_FLASH,0); ...原创 2018-06-20 18:24:10 · 9770 阅读 · 5 评论 -
keil MDK使用虚拟示波器
背景 再硬件开发的过程中需要对一些个信号进行分析,总会想到使用示波器逻辑分析仪等工具。方法 1、安装keil mdk 2、下载工具 Keil Array Visualization V1.0 3、打开相关的选项 打开update选选项 打开TCP端口号相关的选项实例与运行效果 1、代码:#include "stm32f10x.h"#define ...原创 2018-06-20 18:38:29 · 9698 阅读 · 2 评论 -
STM32adc采集的一些bug
调试过程如下:进行调试发现 这个卡死在while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));等待转换结束。一般的卡在这个地方主要是初始化没有做好,需要进行初始化的检查,去看初始化的代码。...原创 2018-07-20 10:14:06 · 6865 阅读 · 2 评论 -
Stm32中的USART_RX_STA
代码如下:void USART1_IRQHandler(void) { u8 res; #ifdef OS_CRITICAL_METHOD //如果OS_CRITICAL_METHOD定义了,说明使用ucosII了. OSIntEnter(); #endif if(USART1->SR&(1<<5))//接收到数据 { ...原创 2018-12-09 15:01:58 · 23416 阅读 · 5 评论 -
stm32编译前为什么要配置keil中C/C++中的define 和include Paths?
这是Keil与编译器的一个相互通信的过程,准确的来说,是编译器读取Keil的配置ARM系列的有一些公司的库编译器,是与Keil的一些配置通信的.比如你说的那个 Define,include path一般来说,我们用Keil做51或者STR710等等一些单片机的程序时候,不需要配置刚才的两个选项,为什么?因为C51和ARM7的编译器不去读取上述的配置.而Cortex-M3编译器,原创 2015-08-13 19:30:13 · 20618 阅读 · 0 评论