STM32学习笔记
文章平均质量分 71
偏执灬
原创博客虽有所摘录,但都是从零开始的自学笔记,有事请联系邮箱,824229769@qq.com
展开
-
STM32CUBE安装教程
下载连接:http://pan.baidu.com/s/1m5dmu#path=%252FSTM32CubeF4%2520v1.4.0按照提示下载java环境即可固件版本也可以采样离线下载在安装进入。找到对应的芯片的固件库版本,下载安装。即可原创 2016-11-21 10:44:54 · 3766 阅读 · 0 评论 -
usb描述符的简介
Descriptor即描述符,是一个完整的数据结构,可以通过C语言等编程实现,并存储在USB设备中,用于描述一个USB设备的所有属性,USB主机是通过一系列命令来要求设备发送这些信息的。它的作用就是通过如问答节中的命令***作来给主机传递信息,从而让主机知道设备具有什么功能、属于哪一类设备、要占用多少带宽、使用哪类传输方式及数据量的大小,只有主机确定了这些信息之后,设备才能真正开始工作,所以描述符转载 2017-08-13 11:04:01 · 593 阅读 · 0 评论 -
usb交互过程简介
大致过程是这样的, 设备插入 1)主机会轮回查询各个USB端口,主机检测到D+与D-之间有电压差,就认为有新的设置接入。主机等待100ms后发出复位请求。设备接到复位请求后将产生一个外部中断信号。 枚举过程 2)主机这时候只是知道有新的设备插入了,但是不知道插进来个什么东西,所以就开始询问它是什么设备,怎么用,负荷能力怎么样。这个时侯就进入了枚举过程。因为刚刚插转载 2017-08-13 10:48:51 · 2190 阅读 · 0 评论 -
STM32学习笔记之-串口中断接收不定数据buff
今天说一下STM32单片机的接收不定长度字节数据的方法。由于STM32单片机带IDLE中断,所以利用这个中断,可以接收不定长字节的数据,由于STM32属于ARM单片机,所以这篇文章的方法也适合其他的ARM单片机。IDLE中断什么时候发生?IDLE就是串口收到一帧数据后,发生的中断。什么是一帧数据呢?比如说给单片机一次发来1个字节,或者一次发来8个字节,这些一次发来的数据,就称为一帧数据,也转载 2017-08-02 22:16:20 · 11108 阅读 · 3 评论 -
usb枚举过程简介
USB 最主要的的是要理解 USB主机发送命令给设备,设备要对主机的命令进行响应, USB通讯的基本单位为 “包” 理解好“包”这个概念是学习USB的关键所在。包有如下分类:分别是令牌包、数据包、握手包和特殊包(其实是由PID决定的)令牌包:可分为输入包、输出包、设置包和帧起始包(注意这里的输入包是用于设置输入命令的,输出包是用来设置输出命令的,而不是放据数的)其转载 2017-08-13 10:58:13 · 571 阅读 · 0 评论 -
usb_hid描述符简介
在USB中,USB HOST是通过各种描述符来识别设备的,有设备描述符,配置描述符,接口描述符,端点描述符,字符串描述符,报告描述符等等。USB报告描述符(Report Descriptor)是HID设备中的一个描述符,它是比较复杂的一个描述符。USB HID设备是通过报告来给传送数据的,报告有输入报告和输出报告。输入报告是USB设备发送给主机的,例如USB鼠标将鼠标移动和鼠标点击等信息返转载 2017-08-13 11:33:58 · 1787 阅读 · 2 评论 -
C语言如何解析json格式字符串
使用cJSON解析JSON字符串 一、为何选择cJSON 我们在使用JSON格式时,如果只是处理简单的协议,可以依据JSON格式,通过对字符串的操作来进行解析与创建。然而随着协议逐渐复杂起来,经常会遇到一些未考虑周全的地方,需要进一步的完善解析方法,此时,使用比较完善的JSON解析库的需求就提出来了。 基于方便引用的考虑,我们希望这个JSON解析库是用C语言实现的...转载 2018-06-25 11:22:07 · 22720 阅读 · 5 评论 -
STM32学习笔记之USB数据接收和发送流程分析
既然学习了USB,那就必须的搞懂USB设备与USB主机数据是怎么通讯的。这里主要讲设备端,因为我们的代码是做USB设备用的。我们需要必须要定义了USB中断。起始在STM32的中断向量表中给USB两个中断,我们可以在stm32f10x.h中找到这两个中断: USB_HP_CAN1_TX_IRQn = 19, /*!< USB Device High Priori转载 2017-12-04 20:38:16 · 9551 阅读 · 0 评论 -
STM32学习笔记之USB虚拟串口描述符简介
Descriptor即描述符,是一个完整的数据结构,可以通过C语言等编程实现,并存储在USB设备中,用于描述一个USB设备的所有属性,USB主机是通过一系列命令来要求设备发送这些信息的。它的作用就是通过如问答节中的命令***作来给主机传递信息,从而让主机知道设备具有什么功能、属于哪一类设备、要占用多少带宽、使用哪类传输方式及数据量的大小,只有主机确定了这些信息之后,设备才能真正开始工作,所以描述符原创 2017-12-03 18:39:04 · 6057 阅读 · 0 评论 -
stm32学习笔记之USB中断配置初始化函数
● 中断映射单元:将可能产生中断的USB事件映射到三个不同的NVIC请求线上:─ USB低优先级中断(通道20):可由所有USB事件触发(正确传输,USB复位等)。固件在处理中断前应当首先确定中断源。─ USB高优先级中断(通道19):仅能由同步和双缓冲批量传输的正确传输事件触发,目的是保证最大的传输速率。─ USB唤醒中断(通道42):由USB挂起模式的唤醒事件触发。原创 2017-12-02 13:26:03 · 13273 阅读 · 0 评论 -
STM32学习笔记之USB库文件分析
主要分析下其他一些文件:usb_core.c、usb_init.c、usb_int.c、usb_mem.c、usb_reg.c和usb_sil.c这几个文件。usb_core.c这个文件从名字上就可知,这是usb的核心文件。这个文件主要是USB在枚举过程中的一些功能函数。比如控制传输的建立阶段、数据阶段、状态阶段的各种标准请求函数,各个阶段的处理函数等。uint8_t Setup0转载 2017-12-02 11:45:56 · 4057 阅读 · 1 评论 -
STM32学习笔记之USB工程目录文件分析
接下去要分别分析下这几个文件:hw_config.c:这个文件主要是配置一些跟板载及系统相关的代码,比如说USB系统时钟配置,上拉电阻引脚及LED灯配置,还有USB的中断灯。主要的函数如下:void Set_System(void); /*设置系统时钟,USB 及LED引脚配置*/void Set_USBClock(void); /*设置USB的时钟转载 2017-12-02 11:43:11 · 2105 阅读 · 0 评论 -
STM32学习笔记之 USB驱动usb_endp.c文件和usb_istr.c文件分析
下面介绍STM32 USB工程的usb_endp.c文件和usb_istr.c两个文件。首先是usb_endp.c,这个文件很简单,就是定义了结果几个端点输入输出函数,我的工程只有。uint8_t USB_Receive_Buffer[REPORT_COUNT]; //端点接收数据的缓存 REPORT_COUNT=64uint8_t USB_Send_Buffer[REPORT转载 2017-12-04 20:12:39 · 3107 阅读 · 0 评论 -
关于波特率与字节传输速率计算
最近项目要考虑串口传输速率的影响,特意去看了一下之前串口传输速率和波特率的选择。波特率115200 = 115200 (位/秒)如果没有校验位,就应该除以 10,得到的是每秒字节数:波特率115200 = 115200 (位/秒) = 11520 (字节/秒) 再除以 1024,就是每秒 KB 数:波特率115200 = 115200 (位/秒) = 11.25 (KB/秒)原创 2016-10-20 15:56:41 · 64287 阅读 · 14 评论 -
关于姿态解算与融合的证明篇(二)
旋转矩阵的变换:对于旋转矩阵转化,先来解决坐标变换的表示。先从二维平面OXY坐标系讲起:当OXY逆时针旋转α度时,同一矢量R在不同坐标下的表示:这里涉及向量的基础知识 补充如下并简单计算: 根据方向余弦矩阵我们可以得到欧拉角:姿态解算的原理: 姿态解算常用的算法有欧拉角法、方向余弦法和四元数法。 欧拉角法在求解姿态时存在奇点(万转载 2016-12-26 14:49:32 · 3558 阅读 · 0 评论 -
关于姿态解算与融合的代码注释篇(三)
加速度计和陀螺仪都能计算出姿态,但为何要对它们融合呢,是因为加速度计对振动之类的扰动很敏感,但长期数据计算出的姿态可信,而陀螺仪虽然对振动这些不敏感,但长期使用陀螺仪会出现漂移,因此我们要进行互补,短期相信陀螺,长期相信加计。不过,其实加计无法对航向角进行修正,修正航向角需要磁力计, 在融合之前先要对传感器原始数据进行一些处理。理想情况下,加速度计水平放置时,XY轴应该是0输出的,仅Z轴输出1个G转载 2016-12-26 15:00:15 · 6007 阅读 · 5 评论 -
STM32学习笔记之__attribute__ ((at())绝对定位分析
学习STM32也会遇到这样的绝对定位的问题如下:uint8_t UART_RX_BUF[1024] __attribute__ ((at(0X20001000))); //就是将串口接收的数据定位到RAM中起始地址为0X20001000;绝对定位要么定位到flash、要么定位到RAM,这里我们将定位在flash进行说明。MDK如何实现将数据存储到FLASH指定地址?原创 2016-07-19 23:26:44 · 34641 阅读 · 4 评论 -
STM32学习笔记之DMA使用
实验:控制串口一以DMA方式发送(TX)数据一、初始化DMA 对STM32任何模块使用前都要对其初始化、首先就是初始化外设时钟,查看时钟数可知DMA时钟由AHB得来。初始化时钟:RCC->AHBENR|=1 在读数据手册可知:直接存储器存取(DMA)用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须原创 2016-07-17 22:57:30 · 7336 阅读 · 0 评论 -
STM32学习笔记之时钟系统
1. STM32的时钟系统 在STM32中,一共有5个时钟源,分别是HSI、HSE、LSI、LSE、PLL(1)HSI是高速内部时钟,RC振荡器,频率为8MHz;(2)HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围是4MHz – 16MHz;(3)LSI是低速内部时钟,RC振荡器,频率为40KHz;(4)LSE是低速外部时钟转载 2016-06-03 21:42:20 · 1222 阅读 · 0 评论 -
STM32学习笔记之独立看门狗(IWDG)的使用
对STM32任何模块使用前都要对其初始化、首先就是初始化外设时钟,可以简单看系统时钟章节关于外设时钟,看数据手册如下: 看门狗由独立内部40K时钟驱动,所以不需要我们在初始化时钟配置寄存器。 读数据手册可以得知看门狗模块使用的系统LSI时钟,初始化配置之前要设置预分配寄存器IWDG_PR,以及设置IWDG_...原创 2016-07-15 23:35:03 · 39061 阅读 · 5 评论 -
STM32学习笔记之外部中断实验
转载于 http://blog.csdn.net/u010661782/article/details/50281229,感谢原作者非常详细的指导学习。实验目的:当按键按下时,让PF10引脚的LED灯亮,当按键再次按下时,让PF10引脚的LED灯灭;无论按下与否,PF9引脚的LED灯循环闪烁;实验步骤:转载 2016-07-15 22:11:38 · 11383 阅读 · 2 评论 -
STM32学习笔记之定时器输入捕获实验
转载于 http://blog.csdn.net/u010661782/article/details/50301729,大侠的原创几篇的STM32转载过来集中供后来者学习。实验目的:在串口调试助手上打印出按键按下的时间实验步骤:实验程序:[cpp] view p转载 2016-07-15 22:17:19 · 6885 阅读 · 0 评论 -
STM32学习笔记之点亮LED灯
转载于 http://blog.csdn.net/u010661782/article/details/50281229,感谢原作者非常详细的指导学习。让我的开发板的LED灯亮灭闪烁实验程序:[cpp] view plain copy/*******************************led.c**转载 2016-07-15 22:13:50 · 5765 阅读 · 0 评论 -
STM32学习笔记之定时器的配置
转载于http://blog.csdn.net/u010661782/article/details/50281443实验目的:让蜂鸣器每隔一秒响一次;实验步骤:实验程序:[cpp] view plain copy/************************le转载 2016-07-15 22:08:51 · 8581 阅读 · 0 评论 -
STM32学习笔记之GPIO配置问题
一、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_A转载 2015-12-30 11:01:33 · 2465 阅读 · 0 评论 -
STM32学习笔记之关于上拉电阻、上拉电阻的接法和使用
上拉电阻就是把不确定的信号通过一个电阻钳位在高电平,此电阻还起到限流的作用。同理,下拉电阻是把不确定的信号钳位在低电平。上拉电阻是指器件的输入电流,而下拉指的是输出电流。那么在什么时候使用上、下拉电阻呢? 1、当TTL电路驱动CMOS电路时,如果TTL电路输出的高电平低于CMOS电路的最低高电平(一般为3.5V),这时就需要在TTL的输出端接上拉电阻,以提高输出高电平的值。 2、OC门转载 2016-06-01 22:05:19 · 23391 阅读 · 0 评论 -
STM32学习笔记之中断向量表,MDK程序启动分析
;// Stack Configuration;// Stack Size (in Bytes) ;// Stack_Size EQU 0x00000200 ;//定义堆栈大小 AREA STACK, NOINIT, READWRITE, ALIGN=3 ;//定义一个数转载 2016-07-20 22:13:25 · 8308 阅读 · 0 评论 -
STM32学习笔记之Keil工程Lib库文件的制作和运用
最近看了百度手环开源项目,发现所有的算法都被封装成了一个lib文件在keil中调用 也是第一次学习到。问题引出:为什么要做成lib库?1、有些人公司将自己写的关键部分源代码公开,但是同时库文件又需要让别人能够正常调用,那封装成lib的格式就是一个好方法。2、编译某些工程文件时非常耗时,像UCGUI和ST官方的库时,由于文件众多,编译一次可能得1两分钟,这时可以打包成库,转载 2016-08-29 09:04:00 · 13746 阅读 · 0 评论 -
关于姿态解算与融合的基础概念篇(一)
方向矩阵:方向余弦矩阵:欧拉角:关于欧拉角和方向余弦的转换:四元数:一个超复数四元数与欧拉角以及方向余弦的相互转化:转载 2016-12-24 12:05:32 · 2643 阅读 · 1 评论 -
stm32学习笔记之堆栈的理解
1.堆和栈大小 定义大小在startup_stm32f2xx.sStack_Size EQU 0x00000400 AREA STACK, NOINIT, READWRITE, ALIGN=3Stack_Mem SPACE Stack_Size__initial_sp; Heap Co转载 2016-11-21 21:03:40 · 9194 阅读 · 0 评论 -
STM32学习笔记之低功耗模式的机制
本文主要解读STM32低功耗模式的机制,并不侧重STM32低功耗的程序实现,而且借助STM32固件库实现STM32低功耗会变的非常简单。一、STM32芯片性能使用芯片型号:stm32f030f4,CORTEX -M0.封装TSSOP20.运行模式:内部时钟(HSI),系统时钟频率采用48MHZ。工作电压:3.3V芯片具体参数如下:转载 2016-11-17 11:23:02 · 31589 阅读 · 3 评论 -
STM32学习笔记之ADC转换
STM32 ADC模数转换简介1. ADC简介stm32f103最少有2个AD模数转换器,每个ADC都有18个通道,可以测量16个外部和2个内部模拟量。最大转换频率为1Mhz,也就是转换时间为1us(在 ADCCLK = 14Mhz,采样周期为1.5个时钟周期时)。最大时钟超过14Mhz,将导致ADC转换准确度降低。stm32的ADC是12位精度的。stm32的ADC转转载 2016-07-16 10:26:24 · 57738 阅读 · 1 评论 -
STM32学习笔记之fatfs文件系统接口函数使用
FatFS文件系统包含了文件ff.h :文件系统实现头文件,定义有文件系统所需的数据结构diskio.h :底层驱动头文件,就一些状态宏的定义和底层驱动函数的申明integer.h:仅实现数据类型重定义,增加系统的可移植性ffconf.h :文件系统配置ff.c :文件系统实现。diskio.c 底层驱动 FatF原创 2016-11-09 15:51:56 · 17996 阅读 · 2 评论 -
STM32学习笔记之对PWM频率和占空比都可调测试
基于战舰开发板 修改的可以对频率和占空比同时调节的一个简单程序。void TIM3_PWM_Init(u16 arr,u16 psc){ GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStruc原创 2016-11-02 22:19:26 · 4975 阅读 · 0 评论 -
STM32学习笔记之复位后初始化变量非零方法
一些产品,当系统复位后(非上电复位),可能要求保持住复位前RAM中的数据,用来快速恢复现场,或者不至于因瞬间复位而重启现场设备。而keil mdk在默认情况下,任何形式的复位都会将RAM区的非初始化变量数据清零。如何设置非初始化数据变量不被零初始化,这是本篇文章所要探讨的。 在给出方法之前,先来了解一下代码和数据的存放规则、属性,以及复位后为何默认非初始化变量所在RAM都被初始转载 2016-09-21 17:29:45 · 12775 阅读 · 1 评论 -
STM32学习笔记之堆栈空间
1.堆和栈大小 定义大小在startup_stm32f2xx.sStack_Size EQU 0x00000400 AREA STACK, NOINIT, READWRITE, ALIGN=3Stack_Mem SPACE Stack_Size__initial_sp; Heap C原创 2016-09-21 16:51:32 · 3346 阅读 · 0 评论 -
STM32学习笔记之硬件SPI读写与极性设置
大家介绍SPI,用的是战舰的教程,文中标红的是特别注意看的地方主要是熟悉flash芯片的指令集,以及存储芯片扇区和块的理解,最重要的是擦除都是以扇区擦除的方式。本节将利用SPI来实现对外部FLASH(W25X16)的读写,并将结果显示在TFTLCD模块上。本节分为如下几个部分:3.17.1 SPI 简介3.17.2 硬件设计3.17.3 软件设计3.17.4原创 2016-08-31 21:54:06 · 19836 阅读 · 1 评论 -
STM32学习笔记之待机唤醒
翻开STM32的中文参考手册,里面关于STM32的低功耗模式有详细的标注. 1、睡眠模式(Cortex™-M3内核停止,所有外设包括Cortex-M3核心的外设,如NVIC、系统时钟(SysTick)等仍在运行) 2、停止模式(所有的时钟都已停止) 3、待机模式(这是本文具体介绍的一种模式,也是功耗最低的模式)原创 2016-08-21 19:42:45 · 15595 阅读 · 1 评论 -
STM32学习笔记之 关于电池检测滤波算法
几种经典的滤波算法(转) 1、限幅滤波法(又称程序判断滤波法) A、方法: 根据经验判断,确定两次采样允许的最大偏差值(设为A) 每次检测到新值时判断: 如果本次值与上次值之差 如果本次值与上次值之差>A,则本次值无效,放弃本次值,用上次值代替本次值 B、优点: 能有效克服因偶然因素引转载 2016-06-03 21:40:34 · 7037 阅读 · 0 评论