
STM32学习
文章平均质量分 62
日常使用STM32的小技巧及小问题解决办法
ReCclay
优快云认证博客专家、优快云万粉博主、优快云嵌入式领域优质创作者、优快云-2020博客之星年度总评选Top25。自入站以来,凭借坚持与热爱,以博文的方式分享所学,累计博文数量达1千余篇,受益人次达300w+次,涉及领域包括但不限于前/后端软件开发、嵌入式软件开发、Linux驱动开发、自动驾驶算法研究、视觉SLAM算法研究、ROS机器人开发、FPGA开发、IC设计与验证等。欢迎您的关注,我们一起进步!
展开
-
【STM32小知识】DMA入门
DMA 全称 Direct Memory Access(直接存储器访问), 是STM32的一个外设,它的特点在于:在不占用CPU的情况下将数据从存储器直接搬运到外设,或者从外设直接搬运到存储器,当然也可以从存储器直接搬运到存储器。比如在需要串口发送大量数据的时候,CPU只需要发起DMA传输请求,然后就可以去做别的事情了,DMA会将数据传输到串口发送,DMA传输完之后会触发中断,CPU如果有需要...原创 2020-02-28 13:00:12 · 528 阅读 · 0 评论 -
RAM程序编译对应的 Code RO-data RW-data ZI-data含义
编译完成可以看到:Program Size: Code=54872 RO-data=8656 RW-data=764 ZI-data=21812 在keil中的map文件可以看到如下信息:Total RO Size (Code + RO Data) 18568 ( 18.13kB)Total RW Size (RW Data + ZI Data) ...原创 2020-01-31 10:09:00 · 726 阅读 · 0 评论 -
单片机中的堆栈
一块RAM 分为了 堆 和 栈注意1函数的局部变量过多,导致栈(STACK)越界,出现程序跑错乱,重启 / 死机的现象。因为STACK是往下增长,所以会占用 Heap 的地方解决方法:1,确定程序没有问题 2,增大Stack注意2不能够使用malloc分配出内存,可增大 heap。...原创 2020-01-28 17:02:49 · 814 阅读 · 0 评论 -
STM32-IAP学习笔记
一、IAP名词解释所谓的IAP(在应用编程)说白了,功能就是可以实现用户程序的升级。为此实际开发中需要准备两份工程代码,一份工程代码我们称之为BootLoader程序,另一份工程代码我们称之为APP程序。在实际操作过程中是先通过软件(如keilMDK的download按钮)手动下载第一份BootLoader程序到STM32的FLASH中,该部分代码主要通过某种通信接口(常用USART)接收第二...原创 2020-01-18 17:07:07 · 4699 阅读 · 0 评论 -
嵌入式C语言 - 字符串分割和字符串截取
cString.c#include "cString.h"char *StringStr = NULL;void cStringFree(void){ free(StringStr);}/*** @brief 获取两个字符串之间的字符串* @param Str 源字符串* @param StrBegin 开始的字符串* @param StrEnd 结束的...原创 2020-01-17 12:11:12 · 1432 阅读 · 0 评论 -
嵌入式C语言中用到的字符数组和字符指针再次总结
之前学习C语言的时候也有单独研究记录过字符数组和字符指针,可参看:https://blog.youkuaiyun.com/ReCclay/article/details/60638929https://blog.youkuaiyun.com/ReCclay/article/details/78034368做嵌入式开发,发现在实际开发中有时完全忘记了这两者的区别,今日特地再来一番总结。笔记1当用一个char...原创 2020-01-17 11:27:19 · 676 阅读 · 0 评论 -
STM32驱动四线I2C的OLED例程
一、原理图二、程序oled.c#include "oled.h"#include "stdlib.h"#include "oledfont.h" #include "delay.h"//OLED的显存//存放格式如下.//[0]0 1 2 3 ... 127 //[1]0 1 2 3 ... 127 //[2]0 1 2 3 ... 127 //[3]0 1 2 3...原创 2020-01-16 20:44:30 · 6710 阅读 · 16 评论 -
STM32之独立看门狗
一、使用背景它的主要功能是在发生软件故障时, 将单片机复位重启。STM32F103 内置独立看门狗和窗口看门狗两类看门狗。二、独立看门狗介绍独立看门狗( IWDG) 顾名思义它是独立运行的, 由专用的低速时钟 LSI 驱动。 优点是当系统主时钟发生故障或停止运行时它仍然有效, 不受程序运行及中断的影响, 缺点是 LSI精度受环境影响较大, 精度不高, 因此 IWDG 适用于对时间精度要求不...原创 2020-01-16 20:06:51 · 1056 阅读 · 0 评论 -
AMS1117和LM2596S芯片的问题总结
一种方案是用两片AMS1117,12V输入,降到5V和3.3V。一种是用LM2596芯片加外围元件构成DCDC降压器得到5V和3.3V。相比较,AMS1117方案外围电路较为简单,但是使用场合又有什么限制呢?电源变换方案不是电压合适了就行,还要考察电流、耗散功率、纹波参数、效率等其它因素。1117是线性稳压器,有多种规格。常见SOT223封装的最大电流为800mA-1A,对应5V输出的话...原创 2020-01-06 14:48:54 · 9477 阅读 · 2 评论 -
STM32使用JLINK的SWD接口下载程序(keil环境下)
我的keil版本为:V5.24一、安装Jlink驱动可移步到网盘下载<传送门>,提取码:fua6二、替换dll文件1、首先找到你安装Keil5的目录,找到ARM这个目录。我的目录如下图,keil的JLINK的dll就在这个目录下。2、下载dll文件,覆盖上述keil目录下的dll文件...原创 2019-12-08 21:36:56 · 17066 阅读 · 4 评论 -
【STM32使用内部RC振荡器】1、时钟源的设置
1、keil设置使用HSI配置系统时钟使用时钟初始化代码之前先一定要设置keil如图所示选项为:<晶振为8MHz>,不能设置25MHz等其它频率。2、加入代码在主函数中先调用以下函数 //系统时钟配置 HSI_SetSysClock(RCC_PLLMul_9);//HSI始终配置为36M函数实现代码如下/* * 使用HSI时,设置系统时钟的步骤 * 1、开启HSI...原创 2019-12-08 21:22:27 · 2905 阅读 · 0 评论 -
FlyMCU下载hex到STM32
习惯了使用ST-LINK,但也避免不免不了使用hex,故记录下载步骤。Step1、 双击打开软件“FlyMcu” ,点击搜索串口;如果此时控制电路通过 USB已经连接到电脑,则会自动搜索到串口号Step2、 对软件“FlyMcu” 做如下设置;Step3、 加载生成的.hex 文件Step4、 点击“开始编程”按钮,下载代码,下载成功如下图所示;...原创 2019-11-02 20:15:18 · 3731 阅读 · 0 评论 -
KST-STM32学习之中断优先级与中断嵌套
1、ARM Cortex-M3 内核搭载了一个强大而方便的中断系统,称之为 NVIC(嵌套向量中断控制器)。2、Cortex-M3 支持 256 个“中断通道”(16 个异常+240 个中断)以及对应的可编程 256 级中断优先级设置。 STM32 虽然采用 Cortex-M3 内核,但是只使用了其中的 84 个“中断通道”(16 个异常+68 个中断)以及 16 级中断优先级设置。3、...原创 2018-07-26 18:38:30 · 4246 阅读 · 1 评论 -
STM32外设资源查询方法,对比C8T6和ZET6
对应不同型号的单片机的外设资源需要找相应的单片机的数据手册,比如STM32F103ZET6数据手册,STM32F103C8T6数据手册.根据FLASH大小STM32F103ZET6 - 为HD型,STM32F103C8T6 - 为MD型。STM32F103ZET6 外设资源数据手册一览STM32F103C8T6外设资源数据手册一览...原创 2018-10-16 14:34:31 · 8513 阅读 · 0 评论 -
STM32之基本调试设置
以 ST-LINK为例STEP1、选中ST-LINK仿真器STEP2、选好自己程序对应的仿真时钟可能会有一个小问题,那就是如何选自己的时钟呢,这个可以看这个文件夹中使用的是哪个宏定义就对应使用的是哪个时钟!...原创 2018-10-16 15:46:15 · 1454 阅读 · 0 评论 -
关于定时器时间的一点小感悟
之前有记录过这个文章,<TIM6的时钟频率疑问>。就是关于定时时间的计算,有了一个大致的了解。TIM6Init(10000, 7200); //初始化定时器 6,预装载值为 10000,预分频值为 7200,定时时间 10000/(72000000/7200)=1s那这篇是想介绍另外一种,假如我定时10ms已经确定,我想做到计每个数用的时间是39(us),那么对应的重装载数值...原创 2018-10-16 17:10:55 · 1095 阅读 · 0 评论 -
sprintf实现浮点数快速转化为字符串
浮点数快速转化为字符串,其实就是用了一个stdio.h中的sprintf.eg:sprintf(str, "%.2f", tmp);原创 2018-11-18 18:38:27 · 3440 阅读 · 0 评论 -
STM32 SWD下载出现no target connect解决方法
文章目录一、问题再现二、问题原因三、解决方法一、问题再现二、问题原因查阅网上讲是芯片写保护了。三、解决方法STEP1: BOOT0引脚拉高使用ISP下载模式.STEP2: 用STM32 ST-LINK Utility连接芯片,然后Target-&gt;Erase Chip。STEP3: 再次进入keil界面,拉低BOOT0,点击LOAD即可下载!...原创 2018-11-17 12:48:58 · 14518 阅读 · 10 评论 -
STM32之JTAG口作为普通IO使用
STM32F10x系列的MCU复位后,PA13/14/15 以及PB3/4默认配置为JTAG功能。有时我们为了充分利用MCU I/O口的资源,会把这些端口设置为普通I/O口。JTAG对应IOJTMS --&amp;amp;gt; PA13JTCK --&amp;amp;gt; PA14JTDI --&amp;amp;gt; PA15JTDO --&amp;amp;gt; PB3JNRST --&a原创 2018-10-01 23:46:30 · 3547 阅读 · 1 评论 -
STM32的printf使用
#include &amp;lt;stdio.h&amp;gt;//加入以下代码,支持printf函数,而不需要选择use MicroLIB #if 1#pragma import(__use_no_semihosting) //标准库需要的支持函数 struct __FILE { int handle; }; FILE __...原创 2018-10-18 13:27:26 · 4532 阅读 · 0 评论 -
STM32几种操作的寄存器版本和库函数版本对比
文章目录1、USART1接收完成标志检测2、USART1发送数据1、USART1接收完成标志检测USART1->SR&0X40 == 0USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET2、USART1发送数据USART1->DR = (u8) ch;USART_SendData(USART1,(u8)ch);...原创 2018-10-18 13:25:48 · 6155 阅读 · 0 评论 -
KST-STM32学习之项目实战RGB舞台灯光
代码还是直接放到Github上吧,此处仅仅展示编程中的亮点及注意事项!&amp;amp;amp;lt;传送门&amp;amp;amp;gt;RGB小灯的原理图奉上~1、相比基本定时器,通用定时器使用输出比较多了设置捕获比较寄存器通道初值和通道预装载。 2、基本定时器在中断中实现的颜色渐变更让人拍手称绝。 ...原创 2018-07-27 21:24:46 · 3002 阅读 · 0 评论 -
【STM32模块化程序】PWM产生
1、STM32的通用定时器STM32F103ZE 拥有 TIM2、TIM3、TIM4 和 TIM5 共 4 个通用定时器。这 4 个定时器除了具备基本定时器的向上计数器功能外,还可以向下、向上/向下计数。此外还具备独立通道,能够实现输入捕获、输出比较、PWM 输出、单脉冲输出等功能。2、PWM功能的几种实现①、硬件实现。比如STM32 自带的 PWM 输出功能就是通过输出比较模式设定占...原创 2018-07-27 12:18:01 · 4034 阅读 · 1 评论 -
KST-STM32学习之位带操作
1、位带的学习其实学习51的时候已经初步领略过,只是当时没有提出这么专业的名次,譬如:TR0 = 1不就是嘛! 51中可以进行位带操作的内存地址为20H 到 2FH 这 16 个字节共 128 位的内存!而其余内存只能字节操作!这么方便的东西,对于STM32当然也是有的啦!2、STM32有两部分可以进行位带操作, SRAM 区的最低 1MB 范围和片内外设区的最低 1MB 范围,而常用的...原创 2018-07-27 10:38:14 · 1374 阅读 · 0 评论 -
KST-STM32 学习之GPIO_Speed
一、 GPIO模式配置1、输入/输出模式(参考stm32手册)2、GPIO输出模式下,几种速度的区别:(1). GPIO 引脚速度: GPIO_Speed_2MHz (10MHz, 50MHz) ;又称输出驱动电路的响应速度:(芯片内部在I/O口的输出部分安排了多个响应速度不同的输出驱动电路,用户可以根据自己的需要选择合适的驱动电路,通过选择速度来选择不同的输出驱动模块,达...转载 2018-07-27 08:20:26 · 2063 阅读 · 0 评论 -
KST-STM32学习之数码管扫描中的一个寄存器操作疑问
完整的代码还是上传到了我的Github上,&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;传送门&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;原创 2018-07-26 22:29:53 · 1112 阅读 · 0 评论 -
KST-STM32学习之基础知识
1、单片机用户来讲,单片机提供给的三大资源分别是程序存储空间、数据存储空间、特殊功能寄存器。2、STM32F103ZE 这款单片机,有 512K 字节的 FLASH(程序存储空间),64K 字节的静态 SRAM(数据存储空间),另外还有大量的特殊功能寄存器提供给用户来实现其功能。3、STM32F103ZE 一共有 144 个引脚, 3.3V供电,注意与51的5V供电区分!4、同51单片...原创 2018-07-26 16:11:01 · 1974 阅读 · 0 评论 -
KST-STM32学习之W25Q128
1、W25Q128 是华邦公司推出的一款 SPI 接口的 NOR Flash 芯片,其存储空间为 128Mbit,相当于 16M 字节。 W25Q128 可以支持 SPI 的模式 0 和模式 3,也就是 CPOL=0/CPHA=0 和CPOL=1/CPHA=1 这两种模式。2、写入数据时,需要注意以下两个重要问题:①、Flash 写入数据时和 EEPROM 类似,不能跨页写入,一次最多写...原创 2018-07-29 16:15:53 · 9310 阅读 · 0 评论 -
KST-STM学习之I2C+SPI
只能说跟51的差不了多少,在这里仅仅记录下主要注意事项吧。1、I 2 C 通信分为标准模式 100kbit/s、快速模式 400kbit/s 和高速模式 3.4Mbit/s。因为所有的I 2 C 器件都支持标准模式,但却未必支持另外两种速度。 所以作为通用的 I 2 C 程序我们选择100k 这个速率来实现,也就是说实际程序产生的时序必须小于等于 100k 的时序参数,有特殊速度需求的器...原创 2018-07-29 14:01:05 · 579 阅读 · 0 评论 -
KST-STM32学习之USART
1、STM32F103ZE 单片机内部集成有 3(USART)+2(UART)个串行通信接口。2、相应的串行通信接口对应的管脚。 3、注意了,USART和UART是不一样的!USART - 既能实现同步通信,又可以异步通信。 UART - 只能实现异步通信。...原创 2018-07-28 12:06:09 · 694 阅读 · 0 评论 -
原子的串口ISP一键下载研究
昨天把我弄晕了,CH340的DTR和RTS。。。原子的原ISP一键下载图:《STM32F1开发指南-库函数版本_V3.1 》中对下载电路的解释: 更直观的解释应该上张图:总而言之,就是对BOOT0和BOOT1的赋值,为了简化电路,把BOOT1下拉到地,只需要控制BOOT0即可。有个问题,不容忽视,复位完之后,进入ISP下载程序,下载完之后,并没有再用上位机控制BOOT...原创 2018-08-02 14:38:20 · 2984 阅读 · 1 评论 -
【STM32模块化程序】通用/高级定时器输入捕获实现超声波测距
文章目录一、输入捕获介绍二、脉宽测量实现三、超声波实现一、输入捕获介绍输入捕获模式可以用来测量脉冲宽度或者测量频率。除了基本定时器,通用和高级均有输入捕获功能。TIMx_CCMR1(捕获/比较模式寄存器) - 通道1和2的控制TIMx_CCMR2(捕获/比较模式寄存器) - 通道3和4的控制二、脉宽测量实现三、超声波实现...原创 2018-10-18 12:58:12 · 7150 阅读 · 5 评论 -
STM32中断源位置
在...\CMSIS\Device\ST\STM32F10x中的stm32f10x.h,然后在结构体IRQn_Type找到对应单片机型号的代码片段。比如STM32F103C8T6属于STM32F10X_MD,那对应的中断源为:再比如STM32F103ZET6对应的是STM32F10X_HD...原创 2018-10-14 19:29:08 · 2518 阅读 · 0 评论 -
STM32开启和关闭总中断的方法
__set_PRIMASK(1); //关总中断__set_PRIMASK(0); //开总中断原创 2018-10-14 16:37:35 · 12279 阅读 · 2 评论 -
STM32的重映射功能,以ZET6的TIM3_CH2通道从PA7->PB5为例
TIM3_CH2 默认是接在 PA7,可以通过重映射功能,把 TIM3_CH2映射到 PB5 上重映射控制是由复用重映射和调试 IO 配置寄存器(AFIO_MAPR) 控制。TIM3_REMAP 是由[11:10]这 2 个位控制的。TIM3_REMAP[1:0]重映射控制表如下:默认条件下,TIM3_REMAP[1:0]为 00,是没有重映射的,所以 TIM3_CH1~TIM3_CH...原创 2018-10-17 23:35:47 · 5767 阅读 · 6 评论 -
【STM小知识】不同FLASH的芯片启动文件选择规则
F103ZET6的FLASH大小是512K,所以选择startup_stm32f10x_hd.sF103C8T6的FLASH大小是64K,所以选择startup_stm32f10x_md.s原创 2018-10-11 17:38:06 · 1318 阅读 · 0 评论 -
【STM32小知识】分频及重装载疑惑
RGB彩灯程序的阅读过程中,到了这两行代码,卡了半天不明所以。回头重新审视第三章的内容,才发现忽略了某些东西!说白了,所谓x分频就是,每经过x个CK_PS周期计数器寄存器加一次1!那么对应到这个实例,也就不难理解了。定时周期10ms,分成256级(重载值255),那么每一级(每计一次数)需要,10ms/256 = 39us….. 对应写程序,重载值255,关键是这个分频值。7...原创 2018-09-05 18:07:27 · 1414 阅读 · 0 评论 -
【STM32小知识】TIM6的时钟频率疑问
通过前面的学习,我们知道了,TIM6是挂载在APB1上的,而APB1通过前面的学习,我们知道最高是36M,而实际我我们写程序并不是36M计算的,而是72M,实际正确的答案也应该是72M,这个是为什么呢?TIM6Init(10000, 7200); //初始化定时器 6,预装载值为 10000,预分频值为 7200,定时时间 10000/(72000000/7200)=1s其实教程也给出...原创 2018-09-05 17:58:42 · 2656 阅读 · 0 评论 -
【STM32基础学习】定时器使用(HSE时钟倍频PLL 72M)
4、定时器STM32F103ZE 中一共有 11 个定时器,包括 2 个高级控制定时器、4 个通用定时器、2个基本定时器(TIM6/TIM7),以及 2 个看门狗定时器和 1 个系统定时器(SysTick)。基本定时器包括 TIM6 和 TIM7 两个定时器模块,由计数器寄存器(TIMx_CNT)(和51的TH/TL一样一样的。。。。)、预分频寄存器(TIMx_PSC)、自动重装载寄存器(...原创 2018-09-05 17:21:19 · 2868 阅读 · 0 评论 -
【STM32软件学习】ST-LINK Utility的使用
STM32 ST-LINK Utility软件主要的功能就是量产(批量下载代码的工具)。 它也是比较实用的一个工具,当我们需要查看芯片FLASH数据时,可以很快定位查找到想要的数据(前提是没有添加保护)。具体安装看&amp;lt;这里&amp;gt;需要配和STLink使用。具体使用配置,看&amp;lt;这里&amp;gt;...原创 2018-08-24 23:00:27 · 15407 阅读 · 0 评论