stm32
文章平均质量分 77
GK小卜
这个作者很懒,什么都没留下…
展开
-
GD32F303RCT6不小心将读保护开启,导致后续程序烧不进去的解决办法
每次系统复位后,闪存的可选字节块被重加载到FMC_OBSTAT和FMC_WP寄存器,可选字节生效。当可选字节被重装载时,如果可选字节的补字节和可选字节不匹配,FMC_OBSTAT寄存器的OBERR位将被置1,可选字节被强制设置为0xFF。这里选择ST的型号,为啥选ST的,一方面因为GD的型号不全,另一方面选择GD的型号可能解锁指令不能用,后面新的J-Flash版本应该会逐步完善GD。GD32F10X,GD32F30X,GD32E103,GD32F3X0 STM32F103系列。原创 2023-11-02 18:59:16 · 1200 阅读 · 3 评论 -
stm32-SPI协议
SPI协议详解(图文并茂+超详细)SPI通讯协议于是我们想有没有更好一点的串行通讯方式;相比较于UART,SPI的工作方式略有不同。SPI是一个同步的数据总线,也就是说它是用单独的数据线和一个单独的时钟信号来保证发送端和接收端的完美同步。时钟是一个振荡信号,它告诉接收端在确切的时机对数据线上的信号进行采样。产生时钟的一侧称为主机,另一侧称为从机。总是只有一个主机(一般来说可以是微控制器/MCU),但是可以有多个从机(后面详细介绍);数据的采集时机可能是时钟信号的上升沿(从低到高)或下降沿(从高原创 2023-10-04 23:48:41 · 458 阅读 · 0 评论 -
stm32 freertos任务切换,多任务状态迁移,中断临界段,任务延时,中断过程,普通中断与任务切换的区别
arm中SP,LR,PC寄存器以及其它所有寄存器以及处理器运行模式介绍一、xTaskCreate()1、prvInitialiseNewTask()2、prvAddNewTaskToReadyList()(1):全局任务计时器uxCurrentNumberOfTasks加一操作。uxCurrentNumberOfTasks 是一个在task.c中定义的静态变量,默认初始化为0(2):如果pxCurrentTCB为空,则将pxCurrentTCB指向新创建的任务。pxCurrentTCB 是一个在t原创 2023-07-06 14:20:14 · 2152 阅读 · 0 评论 -
stm32数据对齐、PRESERVE8、freertos的heap堆栈、
避免数据在内存中跨边界存储,减少读取数据次数,提高效率,本质上是以空间换时间的做法CPU数据线有32位一次最多可以从内存读取32数据,这里的一次指一次存储周期LDR r1 , [pc,#4], 是从pc+#4地址处开始连续读取4个字节的数据到r1寄存器LDRH r1 , [pc,#4], 是从pc+#4地址处开始连续读取2个字节的数据到r1寄存器LDRB r1 , [pc,#4] 直接取pc+#4当前那个地址的数据上述指令都是在一个存储周期里完成的。原创 2023-06-22 11:37:39 · 2827 阅读 · 0 评论 -
stm32的IIC驱动0.96OLED
本文采用的是4针的0.96寸OLED显示进行讲解,采用的是SPI协议,速度会比采用I2C协议的更快,但这两者的显示驱动都一样,本质上没有太大差别。屏幕整体分辨率为128*64,有黄蓝、白、蓝三种颜色可选,驱动芯片为SSD13060.96寸OLED(SSD1306)屏幕显示(一)——基础功能介绍。原创 2023-05-22 17:36:41 · 4091 阅读 · 1 评论 -
通过stm32汇编来看C语言数组内存分配
数组中的元素是字面量,编译后就保存在0x080010f0 flash的RO code中。运行到该处的程序时,在栈中开辟空间(sub sp指令)将字面量保存到栈中。分配完后可以看到在栈地址0x200013b8处看到该数组存放的元素值。先给栈中高地址分配数组高位元素,再给栈中低地址分配数组低位元素。一个u8 test的数组。原创 2023-05-21 12:23:54 · 198 阅读 · 0 评论 -
stm32 CPU执行函数过程,ARM BL指令,PC程序计数器偏移量确定
2.1 汇编格式:BL{cond} label;带返回分支的跳转指令;l 说明:与B 指令不同的是:在跳转之前,将pc的当前内容保存在寄存器R14(LR),该指令用于实现子程序的调用,程序的返回可通过LR(R14)寄存器的值复制到PC(R15)寄存器中实现。下图为例子:如何检测Thumb-2指令长度和PC偏移量位置?PC 内的地址值大多是2的倍数。原创 2023-05-15 22:49:41 · 231 阅读 · 0 评论 -
为什么stm32gpio引脚的翻转速度最大只有18Mhz
通过简单的程序测试,用示波器观察到的翻转时间: 是综合的时间,包括取指令的时间、指令执行的时间、指令执行后信号传递到寄存器的时间(这其中可能经过很多环节,比如AHB、APB、总线仲裁等),最后才是信号从寄存器传输到引脚所经历的时间。@通过简单的程序测试,用示波器观察到的翻转时间: 是综合的时间,包括取指令的时间、指令执行的时间、指令执行后信号传递到寄存器的时间(这其中可能经过很多环节,比如AHB、APB、总线仲裁等),最后才是信号从寄存器传输到引脚所经历的时间。使用合适的驱动器可以降低功耗和噪声。原创 2023-04-12 14:59:18 · 2607 阅读 · 0 评论 -
stm32ADC采样结构参数和相关配置
这里我们发现Q总并不等于QA + QB,这里我们忽略了一个问题,串联电容的等效电容公式初始条件是各电容电荷都为0才能使用该等效公式,如果电容初始时就有电荷,那么通过该公式算得的电荷就不是所有电容加起来的总电荷,只是接入电源后产生的电荷,然后再加上原来的电荷才是总的电荷。(这里不对,该电路还是有对外界导通的,S1线路接入Vref,还是会对电容充放电的,应该说是S1-S11的公共端电极板,也就是等效电路电容A的右极板是没有与外界导电导通的,所以该极板处根据电荷守恒,任何时刻电荷都守恒才得出上述2的公式)原创 2023-05-15 15:37:47 · 1051 阅读 · 0 评论 -
GPIO口输出与输入模式的理解
主要是开漏模式是为了匹配外界的电压,该电压与P-Moss vdd引脚电压并不相同,如果用挽模式来实现开漏输出的效果就会导致P-MOss管烧坏。推挽输出的挽模式与开漏输出唯一的区别就是开漏输出关闭了P-MOSS,那为什么挽模式不能作为开漏模式呢?而输出模式是将输出寄存器上的数字信号输出到相应的引脚上,从而实现CPU对相应引脚电位的控制。因为输入模式是将引脚上的电位输入到输入寄存器上,方便CPU获取,不管引脚上的电流方向。输入输出模式都有电流流入流出,为什么还要分为输入输出模式呢?原创 2023-05-13 23:01:25 · 1437 阅读 · 1 评论 -
stm32的usart通信注意的一些问题
注意一些问题原创 2023-05-06 23:46:32 · 141 阅读 · 0 评论 -
stm32定时器PWM输出
【STM32】通用定时器的PWM输出(实例:PWM输出)注意点:在复用重映射引脚功能时,如果是输出,那么对该引脚的GPIO初始化必须开启为复用推挽或复用开漏模式,而如果是输入就没有这个必要,但都要打开相应的重映射寄存器AFIO上面代码中先给AFIO时钟使能,在调用引脚重映射函数与我的文章中断模型中给EXTI外部线中断是一个道理,如下:...原创 2021-10-17 23:22:07 · 682 阅读 · 0 评论 -
stm32中断模型和中断初始化(EXTI、NVIC、timer、AFIO)
从stm32的架构图可以看到,挂载在APB2上的外设有GPIO、EXTI、AFIOGPIO的所有引脚默认是与输入输出寄存器相连映射的AFIO算是一个不是外设的外设,因为它主要是用来将引脚重映射到其它外设寄存器的,但是对它操作也需要开启相应的时钟,所以也就放在了这里从引脚到->EXTI中断控制器->NVIC控制器的整个硬件架构通用I/O端口以下图的方式连接到16个外部中断/事件线上,配置AFIO_EXTICRx寄存器该部分主要是将引脚重映射到终端线上,也就是下下个图里的输入线但是再这.原创 2021-10-07 00:13:59 · 4357 阅读 · 1 评论 -
单片机的烧录方式:ISP、ICP、IAP的区别
单片机的烧录方式:单片机三种烧录方式ISP、IAP和ICP有什么不同?单片机三种烧录方式ICP、IAP和ISP详解单片机程序烧录的3种方式(ISP、ICP、IAP)是什么?两者的区别原创 2021-09-21 23:56:04 · 503 阅读 · 0 评论 -
stm32启动过程、cortex-m3架构、堆栈代码位置、编译汇编链接分析
分析一、 寄存器、架构、工作流程1、 寄存器架构复位有三种启动方式,从哪里开始启动、启动代码的所在的位置一、 寄存器、架构、工作流程1.这里以stm32的架构:cortex-m3(也即ARMv7)的寄存器的作用、在指令取,指令的译码,指令的执行在其中的作用以及是如何配合实现代码的执行的哈佛结构和冯诺依曼结构是如何体现的?编译后的代码为什么分为code、堆、栈、bss、data、符号等部分,分别存储在哪些地方?首先看寄存器1、 寄存器架构参考官方Cortex-M3权威指南下面这个原创 2021-09-17 00:36:51 · 5622 阅读 · 1 评论 -
stm32中DMA,时钟树、内存总线、配置时钟时先配置flash->acr、通过寄存器点亮led
DMASTM32 DMA使用详解1、画图Cortex-M3内部结构图,要体现相应的总线,并标注其作用。Icode:程序存在Flash中,通过ICode(Instruction Code)总线与Cortex连接取指令。Dcode:数据被存放在外设内部Flash(SRAM)中,通过DCode(Data Code)访问。Systembus: 访问外设的寄存器,通常说的寄存器编程就是用这条总线的。DMA: 数据变量拷贝时可以不占用CPU,通过DMA(Direct Memory Acc原创 2021-03-15 00:50:30 · 2423 阅读 · 1 评论