单片机
文章平均质量分 93
yhl_sophia
这个作者很懒,什么都没留下…
展开
-
旋转编码器与STM32的编码器接口学习
编码器类型主要有增量型原创 2020-07-05 22:34:21 · 2425 阅读 · 0 评论 -
STM32 从APP跳入BootLoader问题
在这次项目中,程序从APP跳入BootLoader主要遇到两个问题,做个记录:1、现象:跳入BootLoader后还没开始升级便重启 原因:APP程序中开启了独立看门狗,当跳入BootLoader时看门狗也继续计时,但并没有重新喂狗,因此导致跳入BootLoader后软 件Reset重新进入APP。 解决办法:在BootLoader中添加喂狗程序或跳入BootLoad...原创 2020-03-19 11:24:13 · 5064 阅读 · 1 评论 -
STM32F070x2_USB-FS-Device_Lib分析
STM32F070x2_USB-FS-Device_Lib总体上分为三个部分1、USB Low Level Driver usb_core.c/h —— 提供USB内核接口 usb_reg.h ——实现硬件抽象层,提供一组访问USBFS_设备外围寄存器的基本功能 usb_bsp_template.c —— 包含低层的核心配置,应该拷贝到应用...原创 2019-12-20 09:59:26 · 700 阅读 · 0 评论 -
STM32 HAL学习(七)USB DFU升级BootLoader
DFU(Device Firmware Upgrade),即固件升级,STM32提供有专门的USB通信协议实现DFU升级BootLoader我用的开发板是STM32F070,支持DFU升级,故用来做做实验,下面对整个过程做个记录。首先是使用STM32Cube MX使能USB外设,并在Class for FS IP中选择Download Firmware Class(DFU),我这里通过判断...原创 2018-11-22 14:46:24 · 8798 阅读 · 6 评论 -
STM32 USB 学习
USB硬件接口1、Type —— Type A(普通PC端)、Type B(USB设备的接口)、Type C(属于USB3.0)2、Mini —— Mini A、Mini B(数码相机、移动硬盘等移动设备)3、 Micro —— Micro A、MicroB(手机等移动设备),属于USB2.0USB模式1、USB HOST模式2、USB OTG U...原创 2019-03-11 17:03:58 · 3104 阅读 · 0 评论 -
STm32F070RB 有关串口通信的几个坑以及硬件流控制
在整理串口库函数时发现有几个以前没有注意到的问题问题一: 如果使能了接收中断,即USART_ITConfig(USART1,USART_IT_RXNE,ENABLE),则默认ORE溢出中断也开启,且此时溢出中断标志USART_IT_ORE不能通过USART_GetITStatus()来检测到,而只能通过USART_GetFlagStatus()检测到,且此时USART_ClearITP...原创 2019-03-20 19:14:18 · 2960 阅读 · 1 评论 -
STM32F070RB基于库函数新建工程文件
太久没有自己新建STM32工程,今天想基于STM32F0库函数新建一个工程文件居然坎坷不行,花了差不多几个小时才成功......果然应该实时记录遇到的问题之后才会方便许多,这里记录一些遇到的问题:1、error: L6235E: More than one section matches selector - cannot all be FIRST/LAST 工程里面加入了多...原创 2019-03-18 17:44:08 · 833 阅读 · 0 评论 -
STM32 I2C调试过程心得记录
又花了好几天的时间调I2C,前前后后出现了很多问题,有一些是不仔细的问题,有一些是对于I2C协议不够了解,手册看的不够认真,总之继续学习,这里将遇到的问题记录下,以便日后查阅 错误一:HardFault硬件错误,逻辑分析仪上显示数据发送到一半就中断了,但是总线上并没有检测到停止信号 原因:这个错误我犯了两次了,乱用指针,直接定义uint8_t * Rxbuffer来接收I2C数据,也没...原创 2019-03-28 10:56:40 · 5068 阅读 · 0 评论 -
STM32 硬件I2C采用DMA发送时ADDR的清除问题
从机I2C DMA中断接收需注意的点:1、开启DMA时钟2、这里要开启I2C EVT事件中断,当地址匹配后清除地址中断标志才能继续发送数据RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);/******* I2C1 DMA Channel Configuration **********/ DMA_DeInit(DMA1_Ch...原创 2019-04-03 14:29:07 · 2903 阅读 · 0 评论 -
STM32调试HardFault错误
https://www.cnblogs.com/zhangshenghui/p/5944881.html转载 2019-04-30 17:35:57 · 455 阅读 · 0 评论 -
FLEX项目学习总结
MCU:STM32F030R8 时钟频率:16MHZ模块资源使用: ADC & DMA—— 监测系统电压,用于掉电检测 UART2 —— 与蓝牙通信 I2C1 —— 与DSP芯片通信 I2C2 —— 与电池包通信 TIM3 & TIM14 —— 呼吸灯PWM、系统延时、系统回调函数注册MCU存储空间资源分配...原创 2019-05-06 18:06:08 · 651 阅读 · 0 评论 -
编译器内存对齐和_align的使用
Strlen和Sizeof的区别Strlen —— 获取能容纳所建立的最大对象的字节大小,一般在编译时就计算好了长度大小,故不能用来返回动态分配时的大小Sizeof —— 返回字符串的长度大小,在运行时计算,返回的长度不包括NULL 编译器的内存对齐问题成员对齐的规则:每个成员按自身类型大小和指定对齐参数(默认是8字节)中较小的那个对齐,且整个结构的长度大小必须为结构中所用...原创 2018-10-25 11:26:02 · 1355 阅读 · 0 评论 -
MX25L4006E —— SPI Flash调试总结
一直觉得SPI通信很简单,也没怎么重视,结果实际读写SPI Flash的时候调试了很久,还是需要一步一步细心配置啊。 MX25L4006E是一款SPI Flash,主要用于做单片机的外扩FLash,用于与单片机通信从而存储数据1、支持双输出模式,双输出时SI和SO引脚作为SIO0和SIO1引脚输出数据2、主要信号线有 SCLK、SI、SO和#CS,当设备不运行且CS#偏高时,将进入...原创 2018-10-16 16:30:15 · 9994 阅读 · 0 评论 -
LPC11U3x系列IAP升级 BootLoader分析
首先要明确LPC11Uxx系列的程序执行开始地址是0x00000000, 从0x0开始的512字节大小的存储空间存放的是中断向量表,之后便是程序,数据一般存放在8KB大小的SRAM中。(具体可参考LPC11U3X存储器映射表)IAP升级主要分为两大部分:Bootloader程序和app程序。 BootLoader程序主要通过USB与上位机进行通信,接收写/读MCU命令并作出相应...原创 2018-09-21 16:41:29 · 744 阅读 · 0 评论 -
LPC11U3x存储器映射
1、MCU不同变量的存储位置 局部变量:栈区(Stack)—— 由编译器自动分配和释放 局部静态变量:静态区 —— 程序结束后由系统释放 全局变量:静态区的常量区 全局静态变量:静态区 堆区(Heap)—— 一般由程序员自行分配和释放,分配malloc和new申请的区域关于malloc和new的区别见链接:https://blog.cs...原创 2018-09-18 16:41:20 · 217 阅读 · 0 评论 -
Boot Loader与IAP相应的设置
IAP升级的APP程序可分为Flash APP和SRAM APP,不同的APP有不同的程序设置地址,同时,中断向量表的偏移地址也要进行相应的设置。 Flash APP 设置IROM1的起始地址为Flash内存起始地址的适当偏移量,结束地址为Flash的结束地址,则偏移前的空间用于Boot Loader,偏移后的空间用于Flash APP。 例:若Flas...原创 2018-09-14 14:10:33 · 888 阅读 · 0 评论 -
LPC11Uxx系列 IAP介绍
void *fun() —— 声明一个返回值是任意类型的指针的函数fun()void (*)() —— 这是一种变量类型,用来定义函数指针变量 IAP (In Application Programming)即在线应用编程,用户自己的程序在运行过程中对User Flash的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信接口对产品中的固件进行更新升级。 ...原创 2018-08-22 15:34:24 · 1260 阅读 · 0 评论 -
CMSIS解析
参考文献:CMSIS详解 基于CMSIS标准的软件架构主要有四层:用户应用层、操作系统层、CMSIS层和硬件寄存器层。 CMSIS层主要分为3个部分:核内外设访问层(CPAL),由ARM负责实现对寄存器名称、地址定义、NVIC接口等定义,统一用_INLINE屏蔽差异,其接口函数均是可重入的。 片上外设访问层(DPAL),由芯片厂商负责实现,可调用CPAL提供的接口函数处理相应...原创 2018-08-22 10:46:00 · 9002 阅读 · 0 评论 -
LPC11Uxx Cortex-M0
32位处理器内核,采用冯诺依曼结构,基于16位的Thumb指令集。处理器模式有线程模式和处理机模式,支持字节、半字和字。CMSIS——Cortex 微控制器软件接口标准,包含处理器内核外设的地址定义和数据结构,组成TCP/IP协议栈和Flash文件系统的中间件元件的可选接口。寄存器:R0-R12——通用寄存器,供数据操作R13(SP)——分为主协议栈指针(MSP)和进程协议栈指...原创 2018-08-06 14:43:39 · 303 阅读 · 0 评论 -
LPC11U35 电源管理
一共有工作、睡眠、深度睡眠、掉电和深度掉电模式,后4种不支持调试模式。各种模式特定与WWDT对其的影响:工作模式:允许IRC或看门狗振荡器,内核和存储器由系统时钟计时,外设有系统或专用时钟计时。深度睡眠模式:允许IRC和看门狗振荡器。内核的系统时钟停止,复位或中断之前都不能执行指令,外设功能继续运行。若保持WWDT的运行,应选择看门狗振荡器为首选时钟源,以最大限度降低功耗。若时钟源...原创 2018-08-03 09:38:56 · 373 阅读 · 0 评论 -
startup_LPC11Uxx.s 启动文件分析
; <h> Stack Configuration; <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>; </h>Stack_Size EQU 0x00000400 //设置栈的大小为1024 AREA STACK,...原创 2018-08-01 10:10:46 · 356 阅读 · 0 评论 -
LPC11U35 闪存编程固件 学习笔记
说明:扇区大小为4KB,页的大小为256个字节,一个扇区包含16页。 1、关于Boot loader 功能:控制复位后的初始操作,并提供闪存编程的方法(初始编程/已编程设备的擦除与重编程/通过应用程序闪存编程)。Boot loader 会求闪存扇区0的前8个位置的校验和,如果为0,则执行控制将转交到用户代码(判定有效用户代码的标准)。 位置: Boot loader 的大小为16kB,...原创 2018-07-31 16:16:57 · 888 阅读 · 0 评论 -
LPC11U35 SSP/SPI学习笔记
SSP (synchronous Seril Port)同步串行端口控制器,可支持SPI、TI和Microwire协议,一条总线允许有多个从机,但某一个时刻只允许有一个主机和一个从机进行通信。多应用于EEPROM、FLASH、实时时钟、AD转换器,还有数字信号处理器和数字信号解码器之间(而I2C多用于同一单片机不同芯片之间的短距离通信)。 SPI支持全双工通信,而I2C仅支持半双...原创 2018-07-31 11:04:39 · 1616 阅读 · 0 评论 -
LPC11U35 I2C学习总结
I2C (Inter-Intergrated Circuit Bus) 物理层: I2C有两条线路,分别是SCL(串行时钟线)和SDA(串行数据线),一条总线上可挂载多个主机和从机 ,但某个时期内只允许有一个主机和一个从机进行通信。有标准模式和快速模式。 协议层: 几种信号:1、起始信号,当SCL为高电平时,SDA由高电平变为低电平2、停止信号,当SC...原创 2018-07-27 14:58:59 · 605 阅读 · 0 评论 -
LPC11Uxx系列 中断向量表重映射
一般来说,任何IAP+APP升级程序都必须进行中断向量表重映射,因为默认情况下单片机上电后中断向量都是指向0x0000 0000地址处的,而使用使用IAP+APP的方式编程时,当进入APP程序入口时,APP已经不指向0x0000 0000处了,所以如果不进行中断向量表映射,当应用程序产生中断却找不到中断服务函数的入口地址,就没有办法处理中断。 对于Cortex-M2/3等芯片...原创 2018-09-27 10:38:33 · 1254 阅读 · 0 评论 -
IAP升级过程中出现 SRC_ADDR_NOT_MAPPED 错误
最近用LPC11U35的单片机做BootLoader升级,在通过IAPCopyRAMToFlash向Flash中写.bin文件时发现待写的地址区域总是0xFF,证明写失败。 在IAP的库函数中,u32IAPCopyRAMToFlash函数有提供一个uint32_t 的返回值,其存储的就是IAP操作中的返回码,通过调试得到每次进行Copy操作时返回码都为4,库函数中定义返回码...原创 2018-09-26 16:20:01 · 653 阅读 · 0 评论