tag 标签: stm32

相关帖子
相关博文
  • 热度 1
    2017-8-9 14:38
    443 次阅读|
    0 个评论
    制作小四轴的计划 经过几个月的学习,STM32算是入门了,外设也会用了,但是…,给一个项目的话还是感觉无从下手,还是不会设计程序的架构,不知道如何再裸奔不带系统的情况下,让各个模块协调的运作起来。所以,我发现我急需要一个完整的项目来练练手了,当然这个项目一定是能够从头到尾的做下去的。以前也试过做项目,或者是因为遇到某一个问题无法解决,或者是不知道怎样建立程序的整体构架,最后都不了了之…… 机会来了,偶然之间发现的一个工程师的秘密基——摩尔吧,有一个指导做四旋翼的系列视频教程,西安小马哥讲的,用的正是STM32MCU,从散件焊接到程序编写,都很详细,对,这正是我现在急需的项目实战机会,真是急人之所急,在此非常感谢小马哥的奉献,抱拳、抱拳。 这个项目涉及到了STM32的很多功能和外设:GPIO、USART、IIC、SPI、ADC、DMA、TIM,还涉及到了一些其它功能模块:蓝牙、NRF24L01、MPU6050等,还能学习PID算法,真是练手神器啊,于是我就按照小马哥课程安排,给自己做了一个计划——两个月跟着小马哥的视频让四旋翼飞起来,具体计划如下: ​ ​ 当然啦,不出意外,依然是每两天写一篇文章发表到公众号,记录制作和学习的过程。 已经有了计划,当然是立马行动了,咔咔咔,已经购买了散件和一系列工具,坐等到货,就开干,先放一张图,给自己打打气…… 如果有写的不合适的地方,还请大家多多指教。如果你有兴趣,也可以一起互相学习,共同进步。 (微信号 :c18093458455)
  • 2017-8-9 14:34
    1700 次阅读|
    0 个评论
    四旋翼如果驱动电机,定时器的PWM输出定然是必不可少的,今天的内容是跟着小马哥的视频,完成高级定时器1的4路PWM输出和如何使用Keil自带的仿真功能检验输出的PWM波。 要使用定时器输出我们需要的PWM,就要会配置定时器。我们直接看高级定时器的功能框图,从框图上看定时器都需要哪些配置: 图中的红色箭头表示一条通道,我们配置好这条通道沿线的寄存器就能输出我们需要的波形了,这条通道上,我标注了三个区域:1、2、3,这三个区域就是需要配置的: 区域1:时钟源选择,我们通过RCC_APB2PeriphClockCmd()就可以选择内部时钟源作为定时器的时钟; 区域2:这里主要是设置时基,通过自动重装载寄存器(TIMx_ARR)、计数器寄存器(TIMx_CNT)、预分频器寄存器(TIMx_PSC)进行设置。对应库函数中的TIM_TimeBaseInit()函数,通过这个函数设置计数模式、预分频数、计数次数等,就可以得到我们想要的计时时间,比如我们要定时1s、1us,这个时间的长度就是通过在这个区域设置的,定时公式为: T = (TIM_Period +1) X (TIM_Prescaler +1)/TIMxCLK ; TIM_Period是计数次数,也就是自动重装载中的值,TIM_Prescaler是预分频系数,是预分频器中的值,TIMxCLK是时钟。 区域3:这个区域是输出比较通道的配置,包括输出比较的空闲模式、输出比较模式、极性、输出状态、捕获/比较寄存器等的设置,对应库函数的TIM_OCxInit()函数,其中捕获/比较寄存器是一个16位寄存器,装的是当前捕获/比较寄存器的值,通过设置这个值,我们就可以得到不同占空比的PWM。 另外,除了这些设置,我们还需要使能自动重装载寄存器ARR的预装载功能,失能捕获/比较寄存器CCR的预装载功能,对应的库函数为: TIM_ARRPreloadConfig(TIM1, ENABLE); TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable); 失能CCR的预装载功能后,写入的值会立即传到捕获/比较寄存器,不用等到更新事件的发生。 其他的配置就不介绍了,大家可以参考官方例程。 配置好定时器后,我们怎样知道,到底有没有PWM输出呢,检测方法有好几种,视频中介绍的是利用Keil自带的仿真功能,下面我们就说说,这个仿真功能怎么使用: 步骤: 第一步:配置好定时器,运行程序,并且没有错误; 第二步:点击工具栏的“Options for target”,选择Debug选项卡,进行如下设置: 第三步:点击工具栏的“Start/Stop Debug”快捷键,然后点击“Setup”,进入下面的界面,点击红框表示的位置,添加仿真通道: 需要添加四次,即添加四个通道,因为我们有四路输出,添加通道的名称分别为:PORTA.8、PORTA.9、PORTA.10、PORTA.11,我们TIM1的四个输出通道是GPIO_8,GPIO_9,GPIO_10,GPIO_11,通道添加好后,点Close; 第四步:此时,已经有四个通道了,我们需要设置输出通道为数字输出,方法是:鼠标右键点击下图红框所示位置,选择bit即可,每一路都要设置; ​ ​ 第五步:点击工具栏的“Run”,启动仿真,就看到有四路输出了,神不神奇? 今天的内容到这里就结束了,真是收获满满呀…… 如果有写的不合适的地方,还请大家多多指教。如果你有兴趣,也可以一起互相学习,共同进步。 (微信号 :c18093458455)
  • 2017-8-9 14:32
    410 次阅读|
    0 个评论
    今天跟着视频学习了位运算,感觉很有用,这里分享给大家。 位运算 位运算主要有:位与运算符()、按位或运算符(|)、异或运算符(^)、取反运算符(~)、左移运算符()、右移运算符()等,下面我们分别介绍这几个位运算的用法及其在程序中的运用。 (1)位与() 按位与运算符“”是双目运算符。其功能是参与运算的两数各对应的二进位相与。两个数相“与”时,如果两个位同时为1,则结果为1,否则为0,即:11=1,10=0,01=0,00=0。 比如:0xc30x11计算如下 在STM32编程中位与()运算可以作为条件判断之用,请看下面的程序: uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin),这是STM32库中的函数,用来读取输出的某个引脚的电平,运行一下”Go To Definition”,你会发现下面的语句: if ((GPIOx-ODR GPIO_Pin) != (uint32_t)Bit_RESET),当然对应的GPIOx-ODR是输出数据寄存器的值,是16位的数值;GPIO_Pin也是STM32库定义的16位类型的数据。 (2)位或(|) 按位或运算符“|”是双目运算符。其功能是参与运算的两数各对应的二进位相或。只要对应的两个二进位有一个为1时,结果位就为1,即:1|1=1,1|0=1,0|1=1,0|0=0。 比如:0xc3|0x10 在STM32编程中位或运算(|),可以作为置位之用,因为位或运算不会改变影响原来数值的其它位,上面的0xc3|0x10,原来的0xc3(b11000011),只有一个位发生了改变。请看下面的程序: GPIO_InitStructure.GPIO_Pin =GPIO_Pin_0|GPIO_Pin_1;这是常见的对两个引脚按位或,在STM32库中,GPIO_Pin_0和GPIO_Pin_1其实也是两个整数,请看它们的宏定义: #define GPIO_Pin_0               ((uint16_t)0x0001)   #define GPIO_Pin_1               ((uint16_t)0x0002)   (3)异或(^) 两个二进制数进行异或,若对应的位不相同,则结果为1,否则为0,即:0^0=0,0^1=1,1^0=1,1^1=0; 比如(0xc3 ^ 0x10) ^ 0x10 ​ ​ 从上面的式子中大家发现了什么,对,0xc3与0x10第一次异或,发生一次改变,且只改变了与0x10相关的位,并且如果与同一个数两次异或,它就恢复到初始值,所以异或(^)具有翻转的功能,在程序中可以当做开关使用,比如,让一个LED灯点亮和熄灭就可以用这种方法: GPIOA-ORD ^= GPIO_Pin_1;     //LED1灯熄灭 Delay_ms(100); GPIOA-ORD ^= GPIO_Pin_1;     //LED1点亮   (4)取反(~) 这是个单目运算符,二进制位取反,如果1取反,结果为0,0取反,结果为1,即:~0=1,~1=0。 程序中取反(~)和按位与()相结合,会有复位的效果。 比如0xd3(~0x10) (~0x10)结果为b11101111,再和0xc3按位与:  是不是达到了复位的效果呢? (5)左移运算符() 左移运算符用来将一个数的各二进制位全部左移若干位,后面补0,移出的位被丢弃,相当于乘2运算,因为位运算比乘法用算快,所以可对一个代码进行优化。 比如0x018,结果为b100000000,就是1后面补8个0,移位运算符在通信时,接收数据时很有用。 (6)右移运算符() 右移运算是将一个二进制位的操作数按指定移动的位数向右移动,移出位被丢弃,对于左边移出的空位,如果是正数,则一律补0,如果是负数,则可能补0,也可能补0,这由不同的机器决定。 这个运算符可以用来获取一个16位数据的高8位,比如:要获取0x1111的高8位,0xcc118,便可得到高8位0xcc。 到这里,今天的内容就结束了。 如果 有写的不合适的地方,还请大家多多指教。如果你有兴趣,也可以一起互相学习,共同进步。 (微信号 :c18093458455)
  • 热度 2
    2017-7-17 14:07
    776 次阅读|
    0 个评论
    STM32单片机的堆栈自顶向下,从符号__initial_sp开始,到符号STACK结束。 如果函数内部定义了大数组,或者参数传递过深,就会造成堆栈溢出,且它无法被编译器检测出来。 有一种运行时检测堆栈的方法: 使用readelf工具,读出alf文件的符号表; 找到临近符号表的最后一个数据结构,为其增加一组变量,赋特定值; 在系统定时器里,持续检测这些值是否被改变。
  • 2017-5-30 13:10
    888 次阅读|
    0 个评论
    刚入电源坑的菜鸟一枚,开个日记记录下自己学习电源的过程及心得。 第一个独立项目: 程控可调线性稳压电源 设计目标: 输入AC 220V 两路输出电压0~15V可调,输出最大电流:1A。 带过流保护功能,电压步进0.1V。 以下是本次制板所遇到的问题 1.有大电流通过的测量线要足够粗,防止线上损耗电能。对于电子负载,经过大电流时,线端的电压会明显低于板端电压,这时候要以着重测量板端电压为准。同样,在测试时DC-DC部分时,外部输入电源与板子连接的线也要足够粗。我在测试时发现该电源DC-DC部分负载调整率很差,输出电流刚过0.5A,输出电压就会掉下去大概1V。后来测试时发现有两个问题:一是我是以电子负载显示的数值为准,而PCB板与电子负载之间连接的导线很细,这就导致有大电流经过时,导线上回损失一部分电压,因此应以板端电压为准。二是我发现外部电源的地与PCB板上的地有1V多压差。刚开始很迷惑,后来想到我是用杜邦线连接的外部电源与PCB,这样做太不专业了,将外部电源的输出线直接接到PCB板上后,这个压差消失,电源的负载调整率有了极大的改善。因此测试电源时也有许多需要注意的地方。 2.电源的输出电压反馈分压电阻上接入电容的取值不合适会引起震荡,需复习零极点分析。 3.绘制元件封装时不能只考虑焊盘位置,还要考虑元件本身占用的大小。 4. 绘制变压器封装的时候遇到了一个坑,网上给的图是变压器从底下向上看的图,我当成了变压器的俯视图,结果导致我画出来的封装与实际封装成一个镜像,做出板子后才发现这个问题。以后要注意。 altium使用技巧: 本次制板经历使我掌握了altium里更多的技巧,比如多通道设计,对铺铜的设计等等,在此进行归纳: 1.修改局部铺铜,铺铜时候手抖一下可能就导致铺铜的形状让人不满意,可以右键--ploygen action--move vertains.来细微调整铺铜形状。 2.slice ploygen pour 可以将一整块铺铜切割成两块,可以用来隔离模拟地和数字地。 3.铺铜比放置fill好很多,因为铺铜可以通过重新铺铜来方便地调整形状,Fill不行。 4.Ctrl+D 在弹出的窗口中可以隐藏铺铜,方便设计 5.PCB编号后与原理图的匹配办法: 在PCB中对元器件进行重新编号以后,即PCB中选择Tool - Re-annotate,选择编号路径后,保存文件; 系统自动生成一个后缀为WAS的文件; 打开SCH文件,选择Tool - Annotate Schematics - Back Annotate,在弹出的对话框中选择,PCB生成的.WAS文件; 选择Accept Change( Create ECO ),则原理图中元件标号更新成功;
相关资源
  • 所需E币: 0
    时间: 2019-8-6 11:17
    大小: 0B
    本手册介绍了32位基于ARM微控制器STM32F101xx与STM32F103xx的固件函数库。该函数库是一个固件函数包,它由程序、数据结构和宏组成,包括了微控制器所有外设的性能特征。该函数库还包括每一个外设的驱动描述和应用实例。通过使用本固件函数库,无需深入掌握细节,用户也可以轻松应用每一个外设。因此,使用本固态函数库可以大大减少用户的程序编写时间,进而降低开发成本。每个外设驱动都由一组函数组成,这组函数覆盖了该外设所有功能。每个器件的开发都由一个通用API (application programming interface 应用编程界面)驱动,API对该驱动程序的结构,函数和参数名称都进行了标准化。所有的驱动源代码都符合“Strict ANSI-C”标准(项目于范例文件符合扩充ANSI-C标准)。我们已经把驱动源代码文档化,他们同时兼容MISRA-C 2004标准(根据需要,我们可以提供兼容矩阵)。由于整个固态函数库按照“Strict ANSI-C”标准编写,它不受不同开发环境的影响。仅对话启动文件取决于开发环境。该固态函数库通过校验所有库函数的输入值来实现实时错误检测。该动态校验提高了软件的鲁棒性。实时检测适合于用户应用程序的开发和调试。但这会增加了成本,可以在最终应用程序代码中移去,以优化代码大小和执行速度。想要了解更多细节,请参阅Section 2.5。因为该固件库是通用的,并且包括了所有外设的功能,所以应用程序代码的大小和执行速度可能不是最优的。对大多数应用程序来说,用户可以直接使用之,对于那些在代码大小和执行速度方面有严格要求的应用程序,该固件库驱动程序可以作为如何设置外设的一份参考资料,根据实际需求对其进行调整。
  • 所需E币: 0
    时间: 2019-8-6 11:18
    大小: 0B
    本手册是STM32微控制器产品的技术参考手册参照2009年12月 RM0008 Reference Manual 英文第10版,技术参考手册是有关如何使用该产品的具体信息,包含各个功能模块的内部结构、所有可能的功能描述、各种工作模式的使用和寄存器配置等详细信息。 技术参考手册不包含有关产品技术特征的说明,这些内容在数据手册中。数据手册中的内容包括:产品的基本配置(如内置Flash和RAM的容量、外设模块的种类和数量等),管脚的数量和分配,电气特性,封装信息,和定购代码等。
  • 所需E币: 1
    时间: 2019-8-6 11:05
    大小: 0B
    经过几天的学习,基本掌握了 经过几天的学习,基本掌握了 经过几天的学习,基本掌握了 STM32STM32 STM32 的调试环境和一些基本知识。想拿出来 的调试环境和一些基本知识。想拿出来 的调试环境和一些基本知识。想拿出来 与大家共享, 本教程本着最大限度简化删减 STM32STM32 STM32 入门的过程思想,会把我 入门的过程思想,会把我 的整个入门前工作推荐给大家。就算是网上众多教程、笔记一种补充吧, 的整个入门前工作推荐给大家。就算是网上众多教程、笔记一种补充吧, 的整个入门前工作推荐给大家。就算是网上众多教程、笔记一种补充吧, 所以叫学前班教程。其中涉及产品一律隐去来源和牌,防广告之嫌全部汉 所以叫学前班教程。其中涉及产品一律隐去来源和牌,防广告之嫌全部汉 所以叫学前班教程。其中涉及产品一律隐去来源和牌,防广告之嫌全部汉 所以叫学前班教程。其中涉及产品一律隐去来源和牌,防广告之嫌全部汉 字
  • 所需E币: 0
    时间: 2019-8-6 11:08
    大小: 0B
    ALIENTEK MiniSTM32开发板是一款迷你型的开发板,小巧而不小气,简约而不简单。
  • 所需E币: 0
    时间: 2019-8-6 11:15
    大小: 0B
    STM32参考手册,全英文版本
  • 所需E币: 1
    时间: 2019-8-3 09:46
    大小: 0B
    上传者: 咖喱给给
    《例说STM32》以ALIENTEK MiniSTM32开发板为实验平台,结合28个具体实例,由浅入深,一步步讲解STM32的各个外设.随书附带的光盘带有全部实验的源码,另外还有一些 扩展实例,此部分实例虽没有在书本涉及,但也颇具参考价值,作为额外的参考资料附送给读者.书本配套的源码,都有详细的中文注释,让读者非常容易看懂,所 有源码直接复制到电脑,编译,下载即可观看实验结果,非常直观.另外,书本的源码都是基于寄存器的,如果您有学过51或者AVR之类的单片机,那就可以很 快入手.希望<<例说STM32>>能带您进入Cortex M3 的殿堂. [1]
  • 所需E币: 1
    时间: 2019-7-21 17:23
    大小: 0B
    STM32 开发指南(库函数+寄存器) 来自原子哥的战舰STM32开发板资料 文件包含:《STM32开发指南:库函数版本v1.23》《STM32开发指南v1.24》 简介:文中介绍了STM32开发板的实验平台,实验平台的硬件资源介绍,介绍了RVMDK软件入门,STM32开发需要具备的基础知识,以及实验例子。
  • 所需E币: 0
    时间: 2019-7-21 19:52
    大小: 0B
    STM32Cube学习笔记,一步一步手把手带你进入STM32Cube的世界,包括点灯,按键,串口,ADC,DAC等等一共16篇。
  • 所需E币: 0
    时间: 2019-7-13 09:52
    大小: 0B
    上传者: xld0932
    本书参考资料为:《STM32F76xxx参考手册》和《Cortex®-M7内核编程手册》,这两本是ST官方的手册,属于精华版,面面俱到,无所不包。限于篇幅问题,本书不可能面面具到,着重框图分析和代码讲解,有关寄存器的详细描述则略过,在学习本书的时候,涉及到寄存器描述部分还请参考这两本手册,这样学习效果会更佳。 本书着重讲解F767的外设以及外设的应用,力争全面分析每个外设的功能框图和外设的使用方法,让读者可以零死角的玩转STM32—F767。基本每个章节对应一个外设,每章的主要内容大概分为三个部分,第一部分为简介,第二部分为外设功能框图分析,第三部分为代码讲解。
  • 所需E币: 0
    时间: 2019-7-13 09:53
    大小: 0B
    上传者: xld0932
    本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。
  • 所需E币: 0
    时间: 2019-7-13 09:55
    大小: 0B
    上传者: xld0932
    共包含了4个章节:Chrom-Art Accelerator™ 控制器 (DMA2D)、LCD-TFT 控制器 (LTDC)、串行音频接口 (SAI)、可变存储控制器 (FMC)
  • 所需E币: 0
    时间: 2019-7-13 09:56
    大小: 0B
    上传者: xld0932
    本参考手册面向应用开发人员, 提供有关使用 STM32F75xxx 和 STM32F74xxx 微控制器存储器与外设的完整信息。STM32F75xxx 和 STM32F74xxx 构成一个微控制器系列,各产品具有不同的存储器大小、封装和外设。
  • 所需E币: 4
    时间: 2019-6-23 13:48
    大小: 0B
    上传者: royalark_912907664
    基于RT-Thread和STM32的双轮自平衡机器人的设计与实现
  • 所需E币: 3
    时间: 2019-6-18 22:49
    大小: 0B
    上传者: royalark_912907664
    基于MDK的STM32处理器开发应用
  • 所需E币: 3
    时间: 2019-6-10 21:18
    大小: 0B
    上传者: royalark_912907664
    本设计以STM32F407为控制核心,四轴飞行器为载体。硬件上由飞控电路,电源管理,通信模块,动力系统,机架,云台伺服系统组成。算法上采用简洁稳定的四元数加互补滤波作为姿态解算算法,PID作为控制器,实现飞行,云台增稳等功能。具有灵活轻盈,延展性,适应性强好等特点。
  • 所需E币: 3
    时间: 2019-6-15 23:22
    大小: 0B
    上传者: royalark_912907664
    iCore3双核心工控板STM32 FPGA原理图
  • 所需E币: 3
    时间: 2019-6-15 23:23
    大小: 0B
    上传者: royalark_912907664
    STM32F405415, STM32F407417, STM32F427437 and STM32F429439 advanced ARM-based 32-bit MCUs
  • 所需E币: 0
    时间: 2019-6-15 23:25
    大小: 0B
    上传者: royalark_912907664
    STM32F75xxx and STM32F74xxx advanced ARM®-based 32-bit MCUs
  • 所需E币: 3
    时间: 2019-6-15 23:25
    大小: 0B
    上传者: royalark_912907664
    STM8和STM32产品选型手册
  • 所需E币: 3
    时间: 2019-6-15 23:26
    大小: 0B
    上传者: royalark_912907664
    STM32 20-21-45-46 G-EVAL
广告