- 博客(68)
- 资源 (7)
- 收藏
- 关注

原创 STM32CubeMX的使用教程
【STM32】关于STM32CubeMX的使用打开Cube,点击File-》New Project搜索芯片型号这边选择的是STM32L071CB系列上面菜单Docs & Resources可以下载数据手册程序手册等,点击Start Project进行下一步的配置。配置GPIO引脚如图将PA9、PA10配置为USART1_TX、USART1_RX点击右侧的Con...
2019-07-04 11:53:08
29438
原创 STM32 寄存器配置笔记——I2C 读写AT24C02 EEPROM
I2C协议是一种用于同步、半双工、串行总线(由单片机时钟线、单数据交换器数据线组成)上的协议。规定了总线空闲状态、起始条件、停止条件、数据有效性、字节格式、响应确认信号、从设备地址选择、数据方向。有主从机之分,主机主控就是掌控单片机时钟信号的一方,并且起始信号和停止信号也由主机发送。现在很多的硬件、传感器等都是用到i2c协议与MCU(stm32)进行通信的。因此i2c还是必不可少的一个重要知识点。
2023-12-15 17:20:38
821
2
原创 STM32 寄存器配置笔记——USART DMA接收
本文主要介绍STM32如何配合USART的IDLE中断实现USART DMA接收不定长的数据。其中使用的接收缓存还是延用前面博客写的乒乓缓存。使用DMA USART接收来替代中断方式或轮询方式的接收主要是为了提高代码的运行效率,中断方式的接收,每接收一个字节便会产生一个中断,当串口有大量数据需要接收时,会造成CPU不停的被中断打断,频繁的出入栈造成整个系统不稳定的情况且也会影响到主任务里其它流程的执行时序,造成主任务里的流程滞后现象,影响其它事情的实时性。引进DMA的接收正是为了解决该问题。
2023-12-11 16:16:05
894
原创 STM32 寄存器配置笔记——USART DMA发送
直接存储器存取(DMA)用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU干预,数据可以通过DMA快速地移动,这就节省了CPU的资源来做其他操作。当产品对于时序要求较严格时,外设使用DMA的方式能够减轻CPU负担,从而提高整体效率。二、USART1对应的通道三、配置流程1)配置DMA1时钟2)dma初始化配置。
2023-12-08 18:21:55
872
原创 ROM和RAM概念
不同厂家的、不同类型存储器的划分方式不同,有的以页为最小单元,有的以扇区为最小单元,但大部分都以扇区为最小单元,最小单元即指最小擦写单位。扇区、块这些专用名词,其实是从早期的软盘、硬盘等存储器发展而来,目的是将一个存储器划分为多个(扇区、块)区域,更方便的编程管理这些存储单元。比如:STM32F1中小容量芯片内部Flash,1K字节为1页,整个Flash分为32页(当然,不同容量的芯片,页数不同)。扇区和页类似,也是一种存储结构单元,只是扇区更常见,大部分Flash主要还是以扇区为最小的单元。
2023-11-30 11:58:41
225
原创 map文件解析
为什么Rom中还要存RW,因为掉电后RAM中所有数据都丢失了,每次上电RAM中的数据是被重新赋值的,每次这些固定的值就是存储在Rom中的,Total RAM Size(RW Data + ZI Data)。这里以STM32单片机为例加载域就是程序在Flash中的实际存储,而运行域是芯片上电后的运行状态,因为MCU没上电时RAM中没有数据,所以此时所有的东西(包括代码、变量、初始值等)都是存放在flash中的,当上电后又要把变量等复制到RAM中才能正常运行。这不包括 ZI数据和存储在ROM 中的调试信息。
2023-11-30 11:53:31
1481
2
原创 STM32 寄存器配置笔记——USART配置中断接收乒乓缓存处理
本文主要介绍如何配置USART接收中断,使用乒乓缓存的设计接收数据并将其回显在PC 串口工具上。以stm32f10为例,配置USART1 9600波特率。具体配置参考上一章节STM32 寄存器配置笔记——USART配置 打印。乒乓缓存的设计应用场景:当后面的处理单元在工作期间,前面的 buffer 的内容不能被释放。或者,在处理单元工作期间, buffer 的特定地址的内容不止被访问一次。优点是相比全部写完再读的方式,可以节约读写时序。
2023-11-24 16:36:47
1279
2
原创 STM32 寄存器配置笔记——USART配置 打印
本文主要介绍如何配置USART,并通过USART打印验证结果。以stm32f10为例,将PA9、PA10复用为USART功能,使用HSE PLL输出72MHZ时钟 APB2 clk不分频提供配置9600波特率。
2023-11-22 01:48:57
954
原创 STM32 寄存器配置笔记——系统时钟配置 HSE as PLL
本文主要介绍使用HSE高速外部时钟通过PLL倍频输出72MHZ的时钟作为系统时钟。下图为时钟树。使用正点原子的开发板调试OSC_IN、OSC_OUT接的是8MHZ的晶振即为HSE时钟。
2023-11-22 01:22:03
1248
原创 STM32 寄存器配置笔记——GPIO配置输出
本文主要介绍GPIO 作为输出时的寄存器配置。包括时钟配置,输出模式配置。以STM32F10xxx系列为例,配置PA8、PD2端口作为输出,输出高/低电平。
2023-11-12 21:47:04
2276
原创 逻辑分析仪与示波器选择
逻辑分析仪是利用时钟从测试设备上采集和显示数字信号的仪器,最主要的作用在于时序判定。逻辑分析仪与示波器不同,它不能显示连续的模拟量波形,而只显示高低两种电平状态(逻辑1和0)。在设置了参考电压后,逻辑分析仪将采集到的信号与电压比较器比较,高于参考电压的为逻辑1,低于参考电压的为逻辑 0。这样就可以将被测信号以时间顺序显示为连续的高低电平波形,便于使用者进行分析和调试。
2023-11-01 09:48:50
606
原创 搭建mini2440开发环境遇到的问题
cp /mnt/hgfs/vmware(我的windows主机下共享文件夹目录)/arm-linux-gcc-4.4.3.tar.gz /tmp/;3)解压压缩包tar zxvf arm-linux-gcc-4.4.3.tar.gz -C /(该指令执行后解压的文件放在根目录);5)复制文件sudo cp -r /opt/FriendlyARM/toolschain/4.4.3 /usr/local/arm;解决方法:安装32位的库,使64位的Linux系统能够兼容arm-linux-gcc 交叉编译器。
2023-10-31 11:39:17
137
原创 Nor Flash和Nand Flash的区别——笔记
并行存储器、写入速度比较快(比NorFlash快)、容量比较大,适合用于存储大量数据。但NandFlash读取速度比较慢,因此不适合用于存储程序代码和执行代码。串行存储器、读取速度比较快(比NandFlash快),适合用于存储程序代码和执行代码,但NorFlash写入速度比较慢、容量比较小。NorFlash:W25Q25NE(华邦-Winbond)、FM25LQ04(复旦微-FM)、STM32。NandFlash:W25N01KW(华邦-Winbond)、FM25G04B(复旦微-FM)
2023-10-30 10:57:18
359
原创 耳机类型分类
标准不同的耳机插入,会导致识别耳机类型时不稳定,多次检测后如果还是类型不稳定呢个,上层会识别成4段耳机使用。此时mic功能不一定正常,耳机播放声音也肯能会受到影响,具体现象,不同厂商的耳机略有区别。支持耳机按键:高端的支持3个按键 VOLUME UP /VOLUME DOWN /HOOK KEY。4段式耳机 :4节 L/R/MIC/GND或 L/R/GND/MIC。欧标座(OMTP标准):L/R/MIC/GND。美标座(CTIA标准):L/R/GND/MIC。3段式耳机 :3节 L/R/GND。
2023-09-07 09:34:17
822
原创 高德地图轨迹回放功能
一、介绍 在项目过程中,需要对自己设备产品输出的定位信息进行验证。通过路跑测试获取到了一组经纬度数据。这时需要验证这组数据是否是实际路跑测试的轨迹,就用到了高德地图的轨迹回放功能。下面将详细讲述如何使用高德地图轨迹回放,在使用该功能之前需要先做坐标系转换,因为设备用的中科微GPS模组输出的经纬度格式是属于WGS-84坐标系的,使用高德地图需要转换为GCJ02坐标系。二、坐标系WGS84坐标系:即地球坐标系,国际上通用的坐标系。设备一般包含GPS芯片或者北斗芯片获取的经纬度为WGS84...
2021-07-17 11:03:49
7106
5
原创 HAL库学习——GPIO输入作为外部中断触发
一、介绍 通过GPIO输入电平变化,可直接触发外部中断,一般应用于按键检测以及其它脉冲检测。下面讲述外部中断的配置及使用。二、CubeMx配置1)配置GPIO为外部中断模式2)配置为上升沿触发外部中断模式。这里根据实际情况配置,博主是根据项目需要配置为捕捉上升沿。2)开启外部中断三、代码实现 MCU一检测到外部IO有上升沿产生,则会调用外部中断函数,该代码是由CubeMx配置自动生成。 中断函数里主要完成外部中断标志...
2021-07-15 20:13:29
11643
2
原创 FLASH页写入
一、简介 由于FLASH特性,页写入,扇区擦除。因此在写入时,需要考虑写入地址和写入长度并对其做相应处理,以下是代码实现。二、代码实现#define PAGE_SIZE 256void FLASH_WRITE(uint8_t* buf, uint32_t wICAddr, uint16_t numByteToWrite){ uint8_t numOfPage, numOfSingle, offsetAddr, count; //写入整页数 numOfPage...
2021-06-30 11:01:25
2568
原创 HAL库学习——ADC精度问题以及多通道采集
一、简介 博主在使用ADC测量电池电压时,发现测出来的AD值转换为实际电压不匹配,偏差大,因此通过网上收集资料,最终得知ADC采集精度提升的方法。前半部分主要是涉及多通道电压值采集,CubeMx的配置以及代码实现,以采集ADC1通道0、通道8和内部基准电压为例。后半部分讲解使用内部基准电压计算精确度较高的电压值。二、运行环境 MCU: STM32L071CBT6 配置工具:STM32CubeMx IDE:MDK5三、CubeMx配置时钟配置: ...
2021-06-22 20:04:44
10019
8
原创 PIC单片机学习——MCU复位原因分析
一、简介 在项目中有遇到过设备在常上电情况下,出现重启问题。为了区分是软件造成的还是硬件造成的,在每次开机都去读取MCU复位控制寄存器的值来判断。二、RCON复位控制寄存器 寄存器的各个位的值定义如下: 当是软件复位时,主要观察IOPUWR位或WDTO位是否被置1,当是硬件复位时,主要观察BOR和POR是否被置1。...
2021-06-04 17:12:58
1591
2
原创 PIC单片机学习——中断向量之陷阱中断(PIC24EP64GP204)
一、简介 PIC24EP64GP204的中断向量表包含7个不可屏蔽陷阱向量和多达246个中断源,每个中断源都有自己的中断向量,每个中断向量都包含一个24位宽的地址。每个中断向量单元中编程的值是相关的中断服务程序的起始地址。如下表所示为中断向量在程序存储器中的分布。二、陷阱中断向量 陷阱中断向量包括振荡器故障陷阱向量、地址错误陷阱向量、通用硬陷阱向量、堆栈错误陷阱向量、数学错误陷阱向量、DMAC错误陷阱向量、通用软陷阱向量,当出现数组越界,程序跑飞,DMA操作无...
2021-06-04 15:54:21
1344
原创 SVN提交新建文件被忽略,需要逐个add添加
在SVN目录下新建文件点击提交找不到新建的文档把Show unversioned files勾上即可
2021-05-27 09:33:44
1036
原创 使用联合体解决移位问题
一、介绍 当需要将数组转换成32位数据运算时,往往通过移位操作来实现。但是在位数较少的单片机中(8位/16位 MCU),其移位操作是有限的。利用联合体共用内存空间的原理可以有效解决移位问题,将数组的值直接转为32位数据。二、开发环境 MCU:PIC24FJ32GA002 16位 IDE:MAPLAB X 编译器:XC16 v1.20 存储模式:小端模式三、代码实现typedef union{ uint...
2021-05-12 18:10:28
459
原创 AIS消息
1、AIS消息MSG_TYPE = 1!AIVDM,1,1,,B,16=5pB0P008eGKR>Hl;rOgw404bt,0*51MSG_TYPE = 2!AIVDM,1,1,0,A,2AF40003wk<tSF0l4Q@13hARP`0n,0*3BMSG_TYPE = 3!AIVDM,1,1,,B,36<f`>EP008eGbJ>HlP@0?w82000,0*4BMSG_TYPE = 4!AIVDM,1,1,,A,403v671vAQ
2021-03-25 11:32:49
769
原创 printf函数封装
1、简介 当调试日志多,需要对调试日志进行简单管理时,这时就需要对printf函数进行封装。下面讲述如何用自定义函数打印LOG。2、代码实现#include <stdarg.h>#define DEBUG_OUTvoid printf_log(const char* fmt, ...);/********************************************************************************函 数 ...
2021-03-24 16:36:40
4428
原创 Ais解析工具——Ais Decoder的使用
1、介绍 Ais Decoder是一款用于解析AIS消息的工具,可支持大部分消息号的解析。前面博主所发的AIS解析网站都存在着一些缺陷,(部分消息号解析不出来,要么字段的精度解错等)该工具克服了这些问题。因此,稍微简单介绍一些该工具的使用。2、使用 打开工具,出现如下界面。 配置Input Source->Log FileSummany,Summany->Input Filtered,点击Control->Start.选择要解析的文件。(文件...
2021-03-13 17:34:07
4567
10
原创 SourceInsight 4.0工程的创建
一、新建工程二、添加文件 选中src和h文件夹点击Add Tree将所有h文件和c文件加入工程中。 打开以下视图窗口 完成后即可对代码编辑
2020-12-18 11:59:44
1156
原创 HAL库RTC时钟配置
一、说明 该链接主要包括RTC的配置和使用: https://pan.baidu.com/s/1ABQntcLNsffaXW8Slwc0pg 提取码:26yt
2020-12-18 11:22:11
640
原创 BC95AT命令响应格式的接收
一、开发环境 MCU型号:stm32l071cbtx 库:HAL库 IDE:stm32CubeMx、KEIL5 NB模组:BC95-B5二、分析 在使用串口接收模组回复的AT指令时,遇到个问题就是AT命令响应格式为: <CR><LF>+CMD1:<parameters><CR><LF> <CR><LF>OK<CR&...
2020-12-11 16:14:28
576
转载 安装STM32Cubemx-5.6.1报错,需要64位java1.8.0_45 (64-bit)JRE
一、使用环境 操作系统:win10 软件版本:stm32CubeMX Version5.6.1 Java版本:32bit二、现象 打开stm32CubeMX软件弹出如下消息提示框,之后在新建工程搜索MCU型号时经常发生闪退现象。 三、解决方法 升级Java为64位版本即可解决,但是登进去中文官网只有32位版本。经得知需要登入英文官网才能下载到64位版本。下载链接:https://www.java....
2020-11-27 11:26:29
1734
原创 MAPLAB IDE编译的HEX,用MAPLAB X IPE烧写时代码没响应。
一、现象 使用MAPLAB X IDE附带的MAPLAB X IPE工具烧写程序,直接将工程编译生成的hex文件拿去烧写,可以大大的提高生产效率,避免了传统使用工程直接烧写要打开工程加载文件的繁琐。由于老版工具MAPLAB IDE没有对应的烧写hex文件的方式,所以直接将hex移到MAPLAB X IPE烧写。在烧写过程中发现代码烧写进去但跑不起来的问题,然而用MAPLAB IDE工程直接烧写代码能够正常运行。二、解决方法 经分析得知PIC单片机的时钟、看门狗等配置...
2020-11-11 17:46:22
1900
原创 MAPLAB X IDE仿真调试
一、开发环境 操作系统:Windows 10 调试工具:Pickit3 单片机型号:PIC24FJ32GA002二、操作步骤1、连接Pickit3仿真器于单片机对应的烧写口如图示:2、点击调试项目进入调试模式,这时底下输出框显示"运行"代表成功进入调试模式。3、选择断点,该IDE只支持两个断点,使用超过两个时,超过的断点亮灰色代表无效。设置好断点后需暂停然后再重新点击运行才能生效。可以看到在断点处有绿色光标。...
2020-09-15 15:33:49
4616
6
原创 STM32 局部数组使用过大溢出到全局影响代码运行
一、问题 在函数内定义局部数组大小为400,发现其影响了串口接收中断。二、原因 通过动态调试得知,其分配的局部数组地址与全局的串口结构体的空间部分重合造成了寄存器异常中断开启失败。出现此原因在于分配的栈不够造成局部数组溢出占用全局空间。...
2020-08-31 10:22:37
2868
原创 STM32 while语句奇怪的问题
一、现象 定义一个全局变量在while循环里一直去判断,然后在定时器中断里对其做加一操作。出现了这种现象,在while循环里该变量取 出来的值一直为0,在定时器这边取出来的值是一直在变化的。即同个全局变量在不同函数出现两个取值,这是不正常的。二、原因及解决方法 经上网查阅得知是编译器优化问题,认为在while循环里没有去改变该值,所以认为他是不变的则没有去取最新值来更新,解决方法是对变量加上关键字 volatile,表示其为易变的即可解决编译器优化问题,保证同个变量只有一个...
2020-08-31 10:17:34
2354
1
原创 HAL库学习——串口中断一些注意点
1、现象 最近在使用HAL库串口中断做数据接收时遇到了中断接收标志位开启,但是却收不到数据的问题。作者的代码时是在主程序初始化时使用HAL_UART_Receive_IT函数开启中断每次接收一个字符,由于HAL库的底层机制每接收一个字符后都会关闭中断并且进入中断回调函数,所以在中断回调函数里需要再次调用HAL_UART_Receive_IT函数开启中断。但是结果是重复开关单片机电源,出现偶尔串口数据会进不来(串口数据来源:外部模块上电后一直往串口吐)。2、开发环境 IDE:K...
2020-07-24 17:31:00
4570
5
原创 Docklight使用
一、介绍 Docklight是一个测试,分析和模拟串行通信协议(RS232串口,rs485/422等)的工具。相对于一般串口助手,比较具有特色的功能是能够对接收的指定序列回复相应的内容,对于通信协议的模拟,长时间的自测起到较大作用。二、使用1)配置串口参数 点击图中红框处即会弹出串口基本配置的对话框,设置好指定串口的波特率,数据格式后点击OK。 2)打开串口 点击图中红框处的按钮,这时可以看到数据进来,并在...
2020-07-03 15:51:16
7334
原创 HAL库学习——中断嵌套及中断优先级
一、介绍 一般使用多个中断时,就会考虑中断的重要性及其之间的优先级关系。HAL库中可以通过HAL_NVIC_SetPriority函数来设置中断的优先级,决定中断是否能够被抢占。开发环境: MCU:STM32L071CBT6 IDE:KEIL5、STM32CubeMX二、函数的讲解 HAL_NVIC_SetPriority函数的定义如下:/** * @brief Sets the priority of an int...
2020-07-01 16:07:39
8822
原创 HAL库学习——独立看门狗的使用
一、开发环境 IDE:KEIL5 MCU:STM32L071CBT6 操作系统:win10二、介绍 看门狗的使用,一般是用来确保代码能够保持长时间工作不死机的问题。诸如:程序跑飞、数组溢出、代码逻辑错误进入死循环等都会造成代码停止工作,加入看门狗可以有效的解决这类错误问题,相当于是代码的最后一道防线。这里主要讲述的是独立看门狗的使用,即STM32Cube的配置以及代码内部的实现。STM32的独立看门狗由内部专门的 37Khz低速时钟驱动,...
2020-06-24 11:10:42
3577
2
原创 HAL库学习——串口中断
一、介绍 串口的传输方式包括:轮询、中断DMA,在此要介绍的是关于HAL库底层串口接收中断流程的讲解,包括串口错误的处理,中断回调函数以及错误中断回调函数的执行。二、配置流程 首先使用STM32CubeMX配置串口参数和工作方式。如下图: 配置好基础参数波特率和数据长度,校验位,停止位后,选择NVIC Settings点击Enabled使能全局中断。 这样整个串口配置就完成了。三、开启接收中断 ...
2020-06-23 15:30:00
18440
7
MediaCreationTool工具.zip
2020-06-30
STM32L0x3中文参考手册.zip
2020-06-22
基于STM32的车牌识别系统.zip
2020-04-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人