![](https://img-blog.csdnimg.cn/20210625103934410.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
stm32
文章平均质量分 66
总结关于STM32运用方面的一些知识。
一只有理想的程序猿
在嵌入式领域摸爬滚打的小菜鸟。
展开
-
一文搞懂Bootloader跳转到APP 的方法和原理
快速了解单片机bootloader 跳转到APP的方法和一些原理原创 2023-05-11 23:07:22 · 3078 阅读 · 2 评论 -
链接脚本ld
一般而言,程序编译经历下图四个阶段,链接是编译的最后一步,无论是在PC上编译代码,还是在PC上使用嵌入式gcc工具交叉编译嵌入式代码,编译过程都是如下几步。原创 2023-04-09 21:31:14 · 668 阅读 · 0 评论 -
通讯协议制定总结
文章目录前言比较好的帖子转载前言在进行程序设计时,难免会涉及通讯协议的制定,本文通过对工作中用到的通讯协议进行总结,可以为后期制定通讯协议积累经验。制定通讯协议时,要有规范的输出,比如在首页或者第二页要有作者、制定日期、版本、备注这些信息。最主要的是交互模式、通讯逻辑的设计。举例来讲: 比如一问一答、每条命令都需要接收方给出ACK应答确认消息,超时时间设置200ms,连续3次后超时报警。再比如Ymodem协议格式如下图所示帧格式一般取两个字节作为帧头,比如0x5a,0xa5比较好的帖子原创 2021-09-18 14:44:50 · 720 阅读 · 0 评论 -
总结串口常见收发数据的处理方法
文章目录前言1、普通的发送和接收1.1 普通串口初始化1.2 普通串口接收1.2 普通串口发送2、串口空闲中断+DMA2.1 初始化2.2 串口接收前言工作中经常会遇到需要进行串口进行数据收发的环节。在此总结下串口在接收数据时,常见的一些处理方法,框架、逻辑,目的是以后在做类似的串口数据收发时,能够有所启发。1、普通的发送和接收1.1 普通串口初始化串口初始化函数代码如下:oid UART_Init(void){ GPIO_InitTypeDef GPIO_InitStructure;原创 2021-09-18 11:29:54 · 5468 阅读 · 0 评论 -
在STM32中快速运用scanf和printf函数
目录1、前言2、配置2.1、使用微库2.2 不使用微库1、前言在单片机开发调试中可能要输入输出一些数据,因此需要使用到printf和scanf函数。下边将部署的方法做快速说明,方便大家快速使用这两个函数进行开发调试。2、配置printf函数和scanf函数是“标准函数接口”。源代码不需要我们去实现,我们只需要做调用即可。两个函数在软件中实现功能,需要工程进行配置。配置主要分两种。#mermaid-svg-e3eV7dGAKyfjvj73 .label{font-family:'trebuchet原创 2021-07-02 15:42:00 · 3728 阅读 · 3 评论 -
STM32中GPIO的8种工作模式以及在实际项目情景中的使用
GPIO配置(1)GPIO_Mode_AIN 模拟输入(2)GPIO_Mode_IN_FLOATING 浮空输入(3)GPIO_Mode_IPD 下拉输入(4)GPIO_Mode_IPU 上拉输入(5)GPIO_Mode_Out_OD 开漏输出(6)GPIO_Mode_Out_PP 推挽输出(7)GPIO_Mode_AF_OD 复用开漏输出(8)GPIO_Mode_AF_PP 复用推挽输出推挽输出可以输出高,低电平,连接数字器件; 推挽结构一般是指两个三极管分别受两互补信号的控制,总是在原创 2021-06-22 11:29:04 · 1650 阅读 · 0 评论 -
栈的四种方式、大端、小端模式的区别
栈的四种方式根据栈指针指向,可分为满(Full)/空(Empty):满SP指向最后一个入栈的数据,需要先修改SP再入栈空SP指向下一个空位置,先入栈再修改SP根据压栈时SP的增长方向,可分为增/减:增(Ascending):SP变大减(Descending):SP变小组合后,就有4种方式:满增、满减,空增,空减note:我们最常用的是满减栈满减栈:大端、小端模式大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字原创 2021-04-05 13:01:31 · 1148 阅读 · 0 评论 -
MDK中Target Driver Setup中Debug模式中几种模式的含义
1、Reset — HW RESET performs a hardware reset by asserting the hardware reset (HW RESET) signal.复位-硬件复位通过置位硬件复位(HW RESET)信号来执行硬件复位。2、Reset — SYSRESETREQ performs a software reset by setting the SYSRESETREQ bit. The Cortex-M core and on-chip peripherals ar原创 2021-02-07 14:23:41 · 1929 阅读 · 0 评论 -
STM32 GPIO的操作注意事项
GPIO 模式的区别关于GPIO模式的区别我,网络上有很多资源说明。现在对我认为几个重要的点做出总结:四种输入模式:1.GPIO_Mode_IN_FLOATING(浮空输入)2. GPIO_Mode_IPU(上拉输入)3. GPIO_Mode_IPD(下拉输入)4. GPIO_Mode_AIN(模拟输入)四种输出模式:1.GPIO_Mode_Out_OD (开漏输出)2.GPIO_Mode_Out_PP (推挽输出)3.GPIO_Mode_AF_OD (复用开漏输出)4. GPIO_M原创 2021-01-08 10:48:46 · 284 阅读 · 0 评论 -
离线下载器制作
硬件资源准备:原创 2020-12-15 15:03:17 · 1191 阅读 · 0 评论 -
sprintf函数的运用
一、使用背景:需要通过SEGGER_RTT_printf打印温度传感器得到的温度值(浮点数),由于RTT函数不能打印浮点数。因此需要将浮点数转换成字符串,然后进行打印。 DP.Temp = SMBus_ReadTemp(); sprintf(MYBuff,"TEMP = %f\r\n",DP.Temp); SEGGER_RTT_printf(0,MYBuff); memset(MYBuff,0,sizeof(MYBuff));百度了下可以通过C语言的标准库函数将浮点数.原创 2020-11-09 16:01:31 · 639 阅读 · 0 评论 -
串口、COM口、UART口、USART口、TTL 、RS232 、RS485的区别,常见的电平转换芯片,同步通信异步通信的区别
转载来源: 端口的定义和区别、电平标准的区别:https://blog.csdn.net/wb790238030/article/details/83502823 Usart串口通信:https://www.cnblogs.com/luoxiao23/p/11209814.html usart和uart的区别: https://zhidao.baidu.com/question/552982104.html...原创 2020-06-29 17:09:26 · 472 阅读 · 0 评论 -
STM32字节对齐,以及#pragma pack的作用
转载地址:https://blog.csdn.net/songsong2017/article/details/90449375 https://www.cnblogs.com/King-Gentleman/p/5297355.html https://blog.csdn.net/liuhuiyi/article/details/7538864原创 2020-06-29 15:28:03 · 851 阅读 · 0 评论 -
macro names must be identifiers
出现这个问题的原因是宏定义以数字开头。改为字母开头,错误就消失了。原创 2020-03-27 11:03:43 · 790 阅读 · 0 评论 -
如何通过调用printf函数实现向串口发送数据
printf函数是标准的库函数,定义在stdio.h文件中。printf函数在keil的底层: 在keil中的标准C库中,printf、scanf等输入输出数据流函数是通过fputc、fgetc来实现最底层操作的,所以我们只需要在我们的工程中重定义这两个函数的功能就可以实现printf、scanf等数据流函数的重映射。因此看到通过printf函数向串口输出字节,一般会有如下fputc...原创 2020-03-19 15:56:56 · 1933 阅读 · 0 评论 -
Sprintf函数的作用
近期在浏览代码时,看到了sprintf函数,很疑惑。百度了,才知道这个函数功能很强大。sprintf()函数是标准库的函数,定义在stdio.h头文件中。代码如下:extern _ARMABI int sprintf(char * __restrict /*s*/, const char * __restrict /*format*/, ...) __attribute__((__non...原创 2020-03-19 15:38:03 · 1445 阅读 · 1 评论 -
MDK编译工程出现 error: #513: a value of type "int" cannot be assigned to an entity of type "OS_EVENT *"解决
在调用UCOSII系统中的OS_EVENT *OSQCreate (void **start, INT16U size)的函数时,发现出现error: #513: a value of type "int" cannot be assigned to an entity of type "OS_EVENT *这样的错误。百度了下这种错误可能是没有声明定义导致的,但是自己的头文件都包含了,并且函...原创 2020-03-17 15:05:05 · 12540 阅读 · 1 评论 -
STM32不停的进入串口接收中断卡死主线程的解决方法
项目中采用串口接收中断来接收来自迪文屏发送的消息。在测试中发现如果不停的点击屏幕,那么就会出现主机“死机卡壳”的现象,通过Debug调试发现,实际上主机程序并没有跑飞,而是总是进入串口接收中断从而卡死了主线程的原因导致的。然而此时并没有点击屏幕,为什么还会不停的进入串口中断? 查阅相关资料,原因如下:RXNEIE设置为1的意思是打开了串口接收中断,打那么过载错误中断也会同时...原创 2020-03-17 14:56:43 · 7242 阅读 · 1 评论 -
STM32 PB3作为普通IO口的使用方法
最近在做项目时需要用到PB3作为检测按键检测引脚。该引脚默认低电平,当按键按键按下时电平信号拉高。因此将按键配置为下拉输入。相应始终也打开使能,但是按键按下后,硬件有反应按键按下,但是软件逻辑不能检测到引脚电平拉高。查阅相关资料后,发现STM3210X系列的芯片在复位后,会将PA13/14/15 PB3/4默认配置为JTAG功能。当选择SW模式烧录程序时:SWD只需用到PA13 / JTM...原创 2020-03-17 14:25:48 · 6576 阅读 · 1 评论 -
STM32产生一次软复位的操作方法
最近有看到一行代码,使得STM32产生软复位,对所有的STM32都是适用的,具体方法为:SCB->AIRCR = 0X05FA0000|(unsigned int)0x04;这句话为什么可以使得STM32产生一次软复位,是应为AIRCR寄存器的操作。关于该寄存器各位的含义如下图所示:SCB->AIRCR = 0X05FA0000|(unsigned int)0x04;这段代码使...原创 2020-03-05 14:14:13 · 1709 阅读 · 0 评论 -
STM32 flash的相关总结
文章目录:目录一、FLASH的相关背景知识二、FLASH的相关操作。三、项目中遇到的关于FLASH操作的问题。一、FLASH的相关背景知识STM32的存储器分为RAM 和 ROM。RAM为常说的内存。比如手机的内存2G 4G等等。是程序跑起来时占用的存储空间。特点是掉电数据易丢失。ROM为常说的硬盘。比如手机的128G存储空间。特点是掉电数据不容易丢失。在ST...原创 2020-02-20 15:36:08 · 712 阅读 · 0 评论 -
ADC采样
ADC转换是指将输入的模拟量转化为数字量,并且将数字量读取出来。完成这个动作的时间叫做ADC的采样周期。采样周期 = 转换时间+读取时间。转换时间 = 采样时间+12.5个周期。采样时间可以通过软件设置ADC采样时间寄存器来设置ADC的采样时间。对应的库函数如下:/** * @brief Configures for the selected ADC regular channe...原创 2019-12-07 16:21:46 · 6540 阅读 · 1 评论 -
时钟树较为详细的介绍
用时钟源来产生时钟!在STM32中,有五个时钟源,为HSI、HSE、LSI、LSE、PLL。①、HSI是高速内部时钟,RC振荡器,频率为8MHz。②、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。③、LSI是低速内部时钟,RC振荡器,频率为40kHz。④、LSE是低速外部时钟,接频率为32.768kHz的石英晶体。⑤、PLL为锁相环倍频...转载 2018-12-24 18:08:08 · 4657 阅读 · 1 评论 -
用keil编译程序时 对信息提示栏中Program Size: Code=96540 RO-data=1812 RW-data=5916 ZI-data=106484 的理解
在Keil中编译工程成功后,在下面的Bulid Ouput窗口中会输出下面这样一段信息:Program Size: Code=96540 RO-data=1812 RW-data=5916 ZI-data=106484 各个含义如下:Code :是程序中代码所占字节大小RO-data :程序中所定义的指令和常量大小 (个人理解 :Read Only)RW-data :程序中已初始化的...转载 2018-10-25 09:16:32 · 449 阅读 · 0 评论 -
片上静态RAM的理解
转:什么是静态RAM:存储器是计算机的记忆部件。CPU 要执行的程序、要处理的数据、处理的中间结果等都存放在存储器中。目前微机的存储器几乎全部采用半导体存储器。存储容量和存取时间是存储器的两项重要指标,它们反映了存储记忆信息的多少与工作速度的快慢。半导体存储器根据应用可分为读写存储器(RAM)和只读存储器(ROM)两大类。读写存储器(RAM)读写存储器又称随机存取存储器(Rando...转载 2018-09-10 21:17:59 · 3752 阅读 · 0 评论 -
stm32中u8,u16,u32的理解
u8是unsigned charu16是unsigned shortu32是unsigned int这些都属於变量类型原创 2018-04-19 20:55:12 · 25095 阅读 · 2 评论 -
关于有关寄存器的一些移位操作
寄存器在配置时,有时为了满足配置要求,需要对数据进行一些移位操作。位操作就是左移右移。左移如果单单从c语言角度考虑,丢弃最高位,低位补0。右移和左移有些区别,在处理符号位时,即0正1负,右移会保持符号位不变,即正数补0,负数补1,属于算术右移,会保持符号位不变。左移属于逻辑/算术左移。左移和右移当移动的位数超过类型的位数时,会取余数,然后移动余数个位数。 当真正配置寄存器需要位操作时,就要好...原创 2018-04-03 14:38:32 · 8543 阅读 · 2 评论 -
ST_LINK V2下载调试接口
原创 2019-03-22 13:38:34 · 3163 阅读 · 0 评论 -
关于stm32软复位的一些知识点搜集
最近产品要加软复位的功能,在网上搜集了一下,有以下结果:void Sys_Soft_Reset(void){ SCB->AIRCR =0X05FA0000|(u32)0x04; } ,这样的一个函数就可以实现软复位的效果,具体这样做的依据是什么,搜集了一些知识点,可能和这个函数沾边,也可能不沾边,但是都是软件复位有关的一些知识点,因此粘出来,分享一下,如果大家...原创 2019-03-31 10:32:07 · 2244 阅读 · 0 评论 -
关于FSMC的地址操作
在看正点原子FSMC驱动TFTLCD屏的相关资料时,有一处地址操作的代码不是很懂:////使用 NOR/SRAM 的 Bank1.sector4,地址位 HADDR[27,26]=11 A10 作为数据命令区分线 注意 16 位数据总线时, STM32 内部地址会右移一位对齐!//LCD 操作结构体typedef struct{ vu16 LCD_REG;vu16 LC...原创 2019-04-14 16:27:48 · 883 阅读 · 0 评论 -
串口+DMA接受不定长数据
工作中经常会遇到串口通信,并对交互的数据进行处理。经常用到的是通过不停的产生串口接收中断,然后对数据做处理。,这样做的弊端就是,不停的会产生串口接受中断。中断请求不但使CPU停下来,而且要CPU执行中断服务程序为中断请求服务,这个请求包括了对断点和现场的处理以及CPU与外设的传送,所以CPU付出了很多的代价。后面就可以采用DMA接收数据,这样串口就可以不需要每次接收到一个字节的数据就进入中断,影响...原创 2019-04-18 16:30:05 · 4511 阅读 · 0 评论 -
stm32串口采用循环队列+DMA方式接收数据调试总结
最近在项目中给串口的接收添加DMA,遇到的问题:1、“配置好”DMA后,但是DMA不工作初始化串口1为接收、DMA1的通道3,并使能相应的外设,外设的时钟也全部打开,但是通过调试发现,DMA就是不传输数据。问题点:忽视了DMA的请求映像每个DMA控制器都分管着不同的外设DMA请求,通过查表发现串口1的接收只能映射到DMA1的通道5.因此DMA的通道选择错误。现粘贴串口一的中断处理程...原创 2019-07-24 13:59:54 · 4139 阅读 · 0 评论 -
如何在keil中将文件封装成Lib库
1、如果一份文件已经在整个工程中发挥出了我们期待的作用,现在想要将其封装成库,则可以在已经成型的工程文件中将不需要编译的文件从工程全部移出掉,只留下我们需要封装的文件,如下图2、另外将头文件路径中不需要的头文件路径也去除掉,只包含我们需要封装的头文件路径,如下图3、在Output选项中选择生成库的选项,如下图4、在OBJ文件夹中找出.lib的文件,...原创 2019-07-26 17:26:08 · 6548 阅读 · 2 评论 -
stm32GPIO的输入引脚输出引脚的区别,调用GPIO_ReadInputDataBit和GPIO_ReadOutputDataBit的区别
在进行有关GPIO的高低电平进行逻辑判断时,会有分不清是调用GPIO_ReadInputDataBit还是调用GPIO_ReadOutputDataBit来读取相关GPIO的高低电平。如果这个引脚相对于CPU来讲,是CPU进行输出高低电平,那这个引脚相当于CPU来讲就是输出引脚,如果读取这个引脚的电平状态,那就是调用GPIO_ReadOutputDataBit。比如项目中脚踏是否踩下的状态、脚踏是...原创 2019-09-22 16:34:55 · 8304 阅读 · 0 评论 -
stm32进入HardFault的异常定位方法
首先导致HardFault的原因有很多。堆栈溢出、未分配空间的指针(野指针)、等等。下面介绍几种找出导致HardFault异常的比较实效有用的方法。1、通过地址分析查找。如下图所示,程序进入HardFault异常。可以看到SP寄存器,0x200045B8即为栈地址,该地址里面的值依次为R0~R3、R12、PC(Return address)、xPSR(CPSR或SPSR)、LR。每...原创 2019-10-09 09:26:33 · 5654 阅读 · 0 评论 -
stm32程序遇到OSStartHang的问题解决方法总结
遇到的问题,项目中主控程序运行一段时间后,时间有时长有时短便会进入HardFault,通过调试发现进入HardFault的原因是程序进入了OSStartHang异常,网上大部分贴子的介绍如下:1、因为STM32本身的异常中断PendSV_Handler替代了UCOS的异常中断OSPendSV,使其不能正常执行。这样我们就需要更改PendSV_Handler为OSPendSV以让中断正常。方...原创 2019-10-09 17:53:21 · 1866 阅读 · 0 评论 -
CAN总线远程帧的理解
当CAN总线同时发送ID相同的帧时会发生总线冲突,为了总线访问安全,可以使用远程帧,即使ID相同,由于数据帧的优先级比远程帧要高,因此即使ID相同也不会发生总线冲突。由此可见远程帧可以使请求变得更加简单。...原创 2018-03-30 11:01:14 · 7358 阅读 · 3 评论