超详细的STM32单片机学习笔记汇总
《STM32Cube高效开发教程》笔记
《STM32Cube高效开发教程》读书笔记目录一、前言 (2)1.1 书籍简介 (3)1.2 编写目的 (4)二、STM32Cube概述 (5)2.1 STM32Cube的意义 (6)2.2 STM32Cube的主要特点 (7)三、安装与配置 (9)3.1 STM32Cube的安装 (10)3.2 开发环境的配置 (11)四、创建项目 (12)4.1 新建项目 (13)4.2 项目设置 (14)五、HAL库介绍 (15)5.1 HAL库简介 (16)5.2 HAL库的主要组件 (18)六、STM32最小系统 (19)6.1 STM32最小系统的组成 (21)6.2 STM32最小系统的应用 (22)七、GPIO操作 (24)7.1 GPIO的基本概念 (25)7.2 GPIO的操作方法 (26)八、中断系统 (28)8.1 中断的基本概念 (29)8.2 中断的处理过程 (31)九、定时器 (33)9.1 定时器的功能介绍 (34)9.2 定时器的操作方法 (36)十五、文件系统 (37)一、前言随着科技的飞速发展,嵌入式系统已广泛应用于我们生活的方方面面,从智能手机到自动驾驶汽车,其重要性不言而喻。
而STM32作为一款广泛应用的微控制器系列,以其高性能、低功耗和丰富的外设资源赢得了广大开发者的青睐。
为了帮助开发者更好地掌握STM32系列微控制器的开发技巧,提升开发效率,我们特别推出了《STM32Cube 高效开发教程》。
本书以STM32Cube为核心,通过生动的实例和详细的讲解,全面介绍了STM32系列微控制器的开发过程。
无论是初学者还是有一定基础的开发者,都能从中找到适合自己的学习内容。
通过本书的学习,读者将能够更加深入地理解STM32的内部结构和工作原理,掌握其编程方法和调试技巧,从而更加高效地进行嵌入式系统的开发和应用。
在科技日新月异的今天,STM32系列微控制器将继续扮演着举足轻重的角色。
STM32L4库学习总结
STM32L4库学习总结ST为开发者提供了非常方便的开发库。
到目前为止,有标准外设库(STD库)、HAL库、LL库三种。
前两者都是常用的库,后面的LL库是ST最近才添加,随HAL源码包一起提供,目前支持的芯片也偏少。
一般来说STD库和LL库是不兼容的。
标准外设库(Standard Peripherals Library)是对STM32芯片的一个完整的封装,包括所有标准器件外设的器件驱动器。
这应该是目前使用最多的ST库。
几乎全部使用C语言实现。
但是,标准外设库也是针对某一系列芯片而言的,没有可移植性。
标准外设库仍然接近于寄存器操作,主要就是将一些基本的寄存器操作封装成了C函数。
开发者需要关注所使用的外设是在哪个总线之上,具体寄存器的配置等底层信息。
不支持从STM32L0、L4和F7以后的芯片。
HAL是Hardware Abstraction Layer的缩写,中文名:硬件抽象层。
HAL库是ST为STM32最新推出的抽象层嵌入式软件,可以更好的确保跨STM32产品的最大可移植性。
该库提供了一整套一致的中间件组件,如RTOS,USB,TCP / IP和图形等。
HAL库是基于一个非限制性的BSD许可协议(Berkeley Software Distribution)而发布的开源代码。
ST制作的中间件堆栈(USB主机和设备库,STemWin)带有允许轻松重用的许可模式,只要是在ST公司的MCU 芯片上使用,库中的中间件(USB 主机/设备库,STemWin)协议栈即被允许随便修改,并可以反复使用。
至于基于其它著名的开源解决方案商的中间件(FreeRTOS,FatFs,LwIP和PolarSSL)也都具有友好的用户许可条款。
可以说HAL库就是用来取代之前的标准外设库的。
相比标准外设库,STM32Cube HAL库表现出更高的抽象整合水平,HAL API集中关注各外设的公共函数功能,这样便于定义一套通用的用户友好的API函数接口,从而可以轻松实现从一个STM32产品移植到另一个不同的STM32系列产品。
STM32自学笔记
STM32⾃学笔记⼀、原⼦位操作:原⼦位操作定义在⽂件中。
令⼈感到奇怪的是位操作函数是对普通的内存地址进⾏操作的。
原⼦位操作在多数情况下是对⼀个字长的内存访问,因⽽位号该位于0-31之间(在64位机器上是0-63之间),但是对位号的范围没有限制。
原⼦操作中的位操作部分函数如下:void set_bit(int nr, void *addr)原⼦设置addr所指的第nr位void clear_bit(int nr, void *addr)原⼦的清空所指对象的第nr位void change_bit(nr, void *addr)原⼦的翻转addr所指的第nr位int test_bit(nr, void *addr)原⼦的返回addr位所指对象nr位inttest_and_set_bit(nr, void *addr)原⼦设置addr所指对象的第nr位,并返回原先的值int test_and_clear_bit(nr, void *addr)原⼦清空addr所指对象的第nr位,并返回原先的值int test_and_change_bit(nr, void *addr)原⼦翻转addr所指对象的第nr位,并返回原先的值unsigned long word = 0;set_bit(0, &word); /*第0位被设置*/set_bit(1, &word); /*第1位被设置*/clear_bit(1, &word); /*第1位被清空*/change_bit(0, &word); /*翻转第0位*/⼆、STM32的GPIO锁定:三、中断挂起:因为某种原因,中断不能马上执⾏,所以“挂起”等待。
⽐如有⾼、低级别的中断同时发⽣,就挂起低级别中断,等⾼级别中断程序执⾏完,在执⾏低级别中断。
四、固⽂件:固件(Firmware)就是写⼊EROM(可擦写只读存储器)或EEPROM(电可擦可编程只读存储器)中的程序。
STM32学习笔记及勘误手册
/******************************************************************* 文件名:书写程序中一些特别需要留意的地方文件编辑人:张恒编辑日期:15/11/23功能:快速查阅巩固知识点*******************************************************************/ 版本说明:v1.0版本:1.开始编辑书写整个文档,开始用的为TXT文档的形式,整理了部分学习到的东西和一些在书写常用程序中容易出错的地方,以及经常忽视细节而导致程序运行失败,是巩固知识点,提醒值得注意地方的工具文档。
2.添加的功能上基本涵盖了所有的模块,除了串口通信中的SPI和I2C、I2S等,应用是比较简单后续可能会添加。
3.对一些特定的功能综合应用并未加入进去,这是一个不好的地方,后续应该会随着学习总结更新,每次更新记录为一个版本。
// 2015/11/24;v1.1版本:1.将所有的TXT版本的文档全部转换为DOC模式,并且更新的加入了目录显示,显示为1级目录,方便查阅相关内容。
2.更新了SysTick书写中值得注意的地方3.更新了FSMC的一些细微操作,后续继续追捕更新书写细节。
V1.2版本:1.更新了FSMC部分功能显示,详细了FSMC的使用注意事项2.添加了RTC实时时钟的一些注意事项。
//2015/12/1;V1.3版本:1.更新RTC部分注意事项。
//2015/12/11V1.4版本:1.更新ADC校准标志部分注意事项。
2.更新了TIM1和TIM8的高级定时器特殊功能说明。
//2015/12/13V1.5版本:1.优化了部分注意事项,SysTick的写法上重新的定制写法。
2.优化了ADC在使用过程的一些细节注意地方。
3.面对最近出现的浮点数运算错误,配合AD数据进行总结。
4.RTC细节的把握-配置正确顺序的错误。
STM32学习笔记:读写内部Flash(介绍+附代码)
STM32学习笔记:读写内部Flash(介绍+附代码)⼀、介绍⾸先我们需要了解⼀个内存映射:stm32的flash地址起始于0x0800 0000,结束地址是0x0800 0000加上芯⽚实际的flash⼤⼩,不同的芯⽚flash⼤⼩不同。
RAM起始地址是0x2000 0000,结束地址是0x2000 0000加上芯⽚的RAM⼤⼩。
不同的芯⽚RAM也不同。
Flash中的内容⼀般⽤来存储代码和⼀些定义为const的数据,断电不丢失,RAM可以理解为内存,⽤来存储代码运⾏时的数据,变量等等。
掉电数据丢失。
STM32将外设等都映射为地址的形式,对地址的操作就是对外设的操作。
stm32的外设地址从0x4000 0000开始,可以看到在库⽂件中,是通过基于0x4000 0000地址的偏移量来操作寄存器以及外设的。
⼀般情况下,程序⽂件是从 0x0800 0000 地址写⼊,这个是STM32开始执⾏的地⽅,0x0800 0004是STM32的中断向量表的起始地址。
在使⽤keil进⾏编写程序时,其编程地址的设置⼀般是这样的:程序的写⼊地址从0x08000000(数好零的个数)开始的,其⼤⼩为0x80000也就是512K的空间,换句话说就是告诉编译器flash的空间是从0x08000000-0x08080000,RAM的地址从0x20000000开始,⼤⼩为0x10000也就是64K的RAM。
这与STM32的内存地址映射关系是对应的。
M3复位后,从0x08000004取出复位中断的地址,并且跳转到复位中断程序,中断执⾏完之后会跳到我们的main函数,main函数⾥边⼀般是⼀个死循环,进去后就不会再退出,当有中断发⽣的时候,M3将PC指针强制跳转回中断向量表,然后根据中断源进⼊对应的中断函数,执⾏完中断函数之后,再次返回main函数中。
⼤致的流程就是这样。
1.1、内部Flash的构成:STM32F429 的内部 FLASH 包含主存储器、系统存储器、 OTP 区域以及选项字节区域,它们的地址分布及⼤⼩如下:STM32F103的中容量内部 FLASH 包含主存储器、系统存储器、 OTP 区域以及选项字节区域,它们的地址分布及⼤⼩如下:注意STM32F105VC的是有64K或128页x2K=256k字节的内置闪存存储器,⽤于存放程序和数据。
STM32F20xxx_21xxx单片机硬件开发入门笔记
STM32F20xxx_21xxx单⽚机硬件开发⼊门笔记AN3320Application noteGetting started with STM32F20xxx/21xxx MCUhardware developmentIntroductionThis application note is intended for system designers who require a hardwareimplementation overview of the development board features such as the power supply, theclock management, the reset control, the boot mode settings and the debug management. It shows how to use the high-density performance line STM32F20xxx/21xxx product familiesand describes the minimum hardware resources required to develop anSTM32F20xxx/21xxx application.Detailed reference design schematics are also contained in this document with descriptionsof the main components, interfaces and modes.August 2011Doc ID 18267 Rev 21/29/doc/20ec15b314791711cd7917a6.htmlContents AN3320Contents1Power supplies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61.1Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61.1.1Independent A/D converter supply and reference voltage . . . . . . . . . . . . 71.1.2Battery backup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71.1.3Voltage regulator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71.2Power supply schemes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81.3Reset & power supply supervisor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91.3.1Power on reset (POR) / power down reset (PDR) . . . . . . . . . . . . . . . . . . 91.3.2Programmable voltage detector (PVD) . . . . . . . . . . . . . . . . . . . . . . . . . 101.3.3System reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112Clocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122.1HSE OSC clock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122.1.1External source (HSE bypass) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132.1.2External crystal/ceramic resonator (HSE crystal) . . . . . . . . . . . . . . . . . 132.2LSE OSC clock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142.2.1External source (LSE bypass) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142.2.2External crystal/ceramic resonator (LSE crystal) . . . . . . . . . . . . . . . . . . 142.3Clock security system (CSS) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153Boot configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163.1Boot mode selection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163.2Boot pin connection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163.3Embedded boot loader mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174Debug management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184.1Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184.2SWJ debug port (serial wire and JTAG) . . . . . . . . . . . . . . . . . . . . . . . . . . 184.3Pinout and debug port pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184.3.1SWJ debug port pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184.3.2Flexible SWJ-DP pin assignment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194.3.3Internal pull-up and pull-down resistors on JT AG pins . . . . . . . . . . . . . . 194.3.4SWJ debug port connection with standard JTAG connector . . . . . . . . . 20 2/29 Doc ID 18267 Rev 2AN3320Contents5Recommendations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215.1Printed circuit board . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215.2Component position . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215.3Ground and power supply (V SS, V DD) . . . . . . . . . . . . . . . . . . . . . . . . . . . 215.4Decoupling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215.5Other signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225.6Unused I/Os and features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226Reference design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236.1Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236.1.1Clock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236.1.2Reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236.1.3Boot mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236.1.4SWJ interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236.1.5Power supply . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236.2Component references . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 7Revision history . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28Doc ID 18267 Rev 23/29List of tables AN3320 List of tablesTable 1.Boot modes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 Table 2.Debug port pin assignment. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Table 3.SWJ I/O pin availability. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Table 4.Mandatory components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 Table 5.Optional components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 Table 6.Reference connection for all packages. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 Table 7.Document revision history . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 4/29 Doc ID 18267 Rev 2AN3320List of figures List of figuresFigure 1.Power supply overview. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 Figure 2.Power supply scheme. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Figure 3.Power-on reset/power-down reset waveform. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Figure 4.PVD thresholds. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Figure 5.Reset circuit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Figure 6.HSE external clock. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Figure 7.HSE crystal/ceramic resonators. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Figure 8.LSE external clock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Figure 9.LSE crystal/ceramic resonators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Figure 10.Boot mode selection implementation example. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 Figure 11.Host-to-board connection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 Figure 12.JTAG connector implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 Figure 13.Typical layout for V DD/V SS pair . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 Figure 14.STM32F207IG(H6) microcontroller reference schematic. . . . . . . . . . . . . . . . . . . . . . . . . . 25Doc ID 18267 Rev 25/29Power supplies AN33206/29 Doc ID 18267 Rev 21 Power supplies1.1 IntroductionThe device requires a 1.8V to 3.6V operating voltage supply (V DD ), excepted the WLCSPpackage witch requires 1.65V to 3.6V. An embedded regulator is used to supply the internal 1.2V digital power.The real-time clock (RTC) and backup registers can be powered from the V BAT voltage when the main V DD supply is powered off.1.V DDA and V SSA must be connected to V DD and V SS , respectively.2.The voltage on V REF ranges from 1.65V to V DDA for WLCSP64+2 packages.AN3320Power suppliesDoc ID 18267 Rev 27/291.1.1 Independent A/D converter supply and reference voltageTo improve conversion accuracy, the ADC has an independent power supply that can be filtered separately, and shielded from noise on the PCB.●the ADC voltage supply input is available on a separate V DDA pin ●an isolated supply ground connection is provided on the V SSA pinWhen available (depending on package), V REF– must be tied to V SSA .On 100-pin package and above and on WLCSP64+2To ensure a better accuracy on low-voltage inputs, the user can connect a separate external reference voltage ADC input on V REF+. The voltage on V REF+ may range from 1.8V to V DDA . On WLCSP64+2, the V REF- pin is not available, it is internally connected to the ADC ground (V SSA ).On 64-pin packagesThe V REF+ and V REF- pins are not available, they are internally connected to the ADC voltage supply (V DDA ) and ground (V SSA ).1.1.2 Battery backupTo retain the content of the Backup registers when V DD is turned off, the V BAT pin can beconnected to an optional standby voltage supplied by a battery or another source.The V BAT pin also powers the RTC unit, allowing the RTC to operate even when the main digital supply (V DD ) is turned off. The switch to the V BAT supply is controlled by the power down reset (PDR) circuitry embedded in the Reset block.If no external battery is used in the application, it is highly recommended to connect V BAT externally to V DD .1.1.3 Voltage regulatorThe voltage regulator is always enabled after reset. It works in three different modesdepending on the application modes.●in Run mode, the regulator supplies full power to the 1.2V domain (core, memories and digital peripherals)●in Stop mode, the regulator supplies low power to the 1.2V domain, preserving the contents of the registers and SRAM●in Standby mode, the regulator is powered down. The contents of the registers and SRAM are lost except for those concerned with the Standby circuitry and the Backup domain.Note:Depending on the selected package, there are specific pins that should be connected either to V SS or V DD to activate or deactivate the voltage regulator. Refer to section "Voltage regulator" in STM32F20xxx/21xxx datasheet for details .Power supplies AN33208/29 Doc ID 18267 Rev 21.2 Power supply schemesThe circuit is powered by a stabilized power supply, V DD .●Caution:–The V DD voltage range is 1.8V to 3.6V (and 1.65V to 3.6V for WLCSP64+2 package)●The V DD pins must be connected to V DD with external decoupling capacitors: one single T antalum or Ceramic capacitor (min. 4.7µF typ.10µF) for the package + one 100nF Ceramic capacitor for each V DD pin.●The V BAT pin can be connected to the external battery (1.65V < V BA T < 3.6V). If no external battery is used, it is recommended to connect this pin to V DD with a 100nF external ceramic decoupling capacitor.●The V DDA pin must be connected to two external decoupling capacitors (100nF Ceramic + 1µF Tantalum or Ceramic).●The V REF+ pin can be connected to the V DDA external power supply. If a separate, external reference voltage is applied on V REF+, a 100nF and a 1µF capacitors must be connected on this pin. In all cases, V REF+ must be kept between 1.65V and V DDA .●Additional precautions can be taken to filter analog noise:–V DDA can be connected to V DD through a ferrite bead.–The V REF+ pin can be connected to V DDA through a resistor (typ. 47Ω).●For the voltage regulator configuration, there are specific pins (REGOFF and IRROFF depending on the package) that should be connected either to VSS or VDD to activate or deactivate the voltage regulator specific. Refer to section "Voltage regulator" in STM32F20xxx/21xxx datasheet for details .●When the voltage regulator is enabled, V CAP1 and V CAP2 pins must be connected to 2*2.2µF Ceramic capacitor.AN3320Power suppliesDoc ID 18267 Rev 29/291.Optional. If a separate, external reference voltage is connected on V REF+, the two capacitors (100 nF and1µF) must be connected.2.V REF + is either connected to V REF or to V DDA .3.N is the number of V DD and V SS inputs.4.Refer to section "Voltage regulator" in STM32F20xxx/21xxx datasheet to connect REGOFF and IRROFFpins.1.3Reset & power supply supervisor1.3.1Power on reset (POR) / power down reset (PDR)The device has an integrated POR/PDR circuitry that allows proper operation starting from 1.8V .The device remains in the Reset mode as long as V DD is below a specified threshold, V POR/PDR , without the need for an external reset circuit. For more details concerning the power on/power down reset threshold, refer to the electrical characteristics in STM32F20xxx/21xxx datasheets.On WLCSP66 package if IRROFF pin is set to V DD (in that case REGOFF pin must not be activated, refer to section "Voltage regulator" in STM32F20xxx/21xxx datasheet for details ), the PDR is not functional. Then the V DD can lower below 1.8V , but the external circuitry must ensure that reset pin is activated when V DD /V DDA becomes below 1.65V .Power suppliesAN332010/29 Doc ID 18267 Rev 21.t RSTTEMPO is approximately2.6ms. V POR/PDR rising edge is 1.74V (typ.) and V POR/PDR falling edge is1.70V (typ.). Refer to STM32F20xxx/21xxx datasheets for actual value.1.3.2 Programmable voltage detector (PVD)Y ou can use the PVD to monitor the V DD power supply by comparing it to a thresholdselected by the PLS[2:0] bits in the Power control register (PWR_CR).The PVD is enabled by setting the PVDE bit.A PVDO flag is available, in the Power control/status register (PWR_CSR), to indicatewhether V DD is higher or lower than the PVD threshold. This event is internally connected to EXTI Line16 and can generatean interrupt if enabled through the EXTI registers. The PVD output interrupt can be generated when V DD drops below the PVD threshold and/or when VDD rises above the PVD threshold depending on the EXTI Line16 rising/falling edge configuration. As an example the service routine can perform emergency shutdown tasks.AN3320Power suppliesDoc ID 18267 Rev 211/291.3.3 System resetA system reset sets all registers to their reset values except for the reset flags in the clockcontroller CSR register and the registers in the Backup domain (see Figure 1).A system reset is generated when one of the following events occurs:1. A low level on the NRST pin (external reset)2. window watchdog end-of-count condition (WWDG reset)3. Independent watchdog end-of-count condition (IWDG reset)4. A software reset (SW reset)5.Low-power management resetThe reset source can be identified by checking the reset flags in the Control/Status register, RCC_CSR.The STM32F20xxx/21xxx does not require an external reset circuit to power-up correctly. Only a pull-down capacitor is recommended to improve EMS performance by protecting the device against parasitic resets. See Figure 5.Charging and discharging a pull-down capacitor through an internal resistor increases the device power consumption. The capacitor recommended value (100nF) can be reduced to 10nF to limit this power consumption;Clocks AN332012/29 Doc ID 18267 Rev 22 ClocksThree different clock sources can be used to drive the system clock (SYSCLK):●HSI oscillator clock (high-speed internal clock signal)●HSE oscillator clock (high-speed external clock signal)●PLL clockThe devices have two secondary clock sources:●32kHz low-speed internal RC (LSI RC) that drives the independent watchdog and, optionally, the RTC used for Auto-wakeup from the Stop/Standby modes.●32.768kHz low-speed external crystal (LSE crystal) that optionally drives the real-time clock (RTCCLK)Each clock source can be switched on or off independently when it is not used, to optimize the power consumption.Refer to the STM32F20xxx/21xxx reference manual RM0033 for the description of the clock tree.2.1 HSE OSC clockThe high-speed external clock signal (HSE) can be generated from two possible clock sources:●HSE external crystal/ceramic resonator (see Figure 7)●HSE user external clock (see Figure 6)1.The value of R EXT depends on the crystal characteristics. Typical value is in the range of 5 to 6 R S(resonator series resistance).2.Load capacitance C L has the following formula: C L = C L1 x C L2 / (C L1 + C L2) + C stray where: C stray is the pincapacitance and board or trace PCB-related capacitance. Typically, it is between 2pF and 7pF. Please refer to Section 5: Recommendations on page 21 to minimize its value.Figure 6.HSE external clockFigure 7.HSE crystal/ceramicAN3320ClocksDoc ID 18267 Rev 213/292.1.1 External source (HSE bypass)In this mode, an external clock source must be provided. It can have a frequency from 1 to 16MHz (refer toSTM32F20xxx/21xxx datasheets for actual max value).The external clock signal (square, sine or triangle) with a duty cycle of about 50%, has to drive the OSC_IN pin while the OSC_OUT pin must be left in the high impedance state (see Figure 7 and Figure 6).2.1.2 External crystal/ceramic resonator (HSE crystal)The external oscillator frequency ranges from 4 to 26MHz.The external oscillator has the advantage of producing a very accurate rate on the mainclock. The associated hardware configuration is shown in Figure 7. Using a 25MHz oscillator frequency is a good choice to get accurate Ethernet, USB OTG high-speed peripheral, and I 2S.The resonator and the load capacitors have to be connected as close as possible to the oscillator pins in order to minimize output distortion and startup stabilization time. The load capacitance values must be adjusted according to the selected oscillator.For C L1 and C L2 it is recommended to use high-quality ceramic capacitors in the 5pF-to-25pF range (typ.), designed for high-frequency applications and selected to meet the requirements of the crystal or resonator. C L1 and C L2, are usually the same value. Thecrystal manufacturer typically specifies a load capacitance that is the series combination of C L1 and C L2. The PCB andMCU pin capacitances must be included when sizing C L1 and C L2 (10 pF can be used as a rough estimate of the combined pin and board capacitance).Refer to the electrical characteristics sections in the datasheet of your product for more details.Clocks AN332014/29 Doc ID 18267 Rev 22.2 LSE OSC clockThe low-speed external clock signal (LSE) can be generated from two possible clocksources:●LSE external crystal/ceramic resonator (see Figure 9)●LSE user external clock (see Figure 8)1.“LSE crystal/ceramic resonators” figure:To avoid exceeding the maximum value of C L1 and C L2 (15pF) it is strongly recommended to use a resonator with a load capacitance C L ≤7pF. Never use a resonator with a load capacitance of 12.5pF.2.“LSE external clock” and “LSEcrystal/ceramic resonators” figures:OSC32_IN and OSC32_OUT pins can be used also as GPIO, but it is recommended not to use them as both RTC and GPIO pins in the same application.3.“LSE crystal/ceramic resonators” figure:The value of R EXT depends on the crystal characteristics. A 0Ω resistor would work but would not be optimal. To fine tube R S value, refer to AN2867 - Oscillator design guide for ST microcontrollers.2.2.1 External source (LSE bypass)In this mode, an external clock source must be provided. It can have a frequency of up to 1MHz. The external clock signal (square, sine or triangle) with a duty cycle of about 50% has to drive the OSC32_IN pin while the OSC32_OUT pin must be left high impedance (see Figure 8).2.2.2 External crystal/ceramic resonator (LSE crystal)The LSE crystal is a 32.768kHz low-speed external crystal or ceramic resonator. It has theadvantage of providing a low-power, but highly accurate clock source to the real-time clock peripheral (RTC) forclock/calendar or other timing functions.The resonator and the load capacitors have to be connected as close as possible to the oscillator pins in order to minimize output distortion and startup stabilization time. The load capacitance values must be adjusted according to the selected oscillator.Figure 8.LSE external clockFigure 9.LSE crystal/ceramicAN3320ClocksDoc ID 18267 Rev 215/292.3 Clock security system (CSS)The clock security system can be activated by software. In this case, the clock detector is enabled after the HSE oscillator startup delay, and disabled when this oscillator is stopped.●If a failure is detected on the HSE oscillator clock, the oscillator is automaticallydisabled. A clock failure event is sent to the break input of the TIM1 advanced control timer and an interrupt is generated to inform the software about the failure (clocksecurity system interrupt CSSI), allowing the MCU to perform rescue operations. The CSSI is linked to the Cortex?-M3 NMI (non-maskable interrupt) exception vector.●If the HSE oscillator is used directly or indirectly as the system clock (indirectly means that it is used as the PLL input clock, and the PLL clock is used as the system clock), a detected failure causes a switch of the system clock to the HSI oscillator and thedisabling of the external HSE oscillator. If the HSE oscillator clock (divided or not) is the clock entry of the PLL used as system clock when the failure occurs, the PLL is disabled too.For details, see the STM32F20xxx/21xxx (RM0033) reference manuals available from the STMicroelectronics website /doc/20ec15b314791711cd7917a6.html .Boot configuration AN332016/29 Doc ID 18267 Rev 23 Boot configuration3.1 Boot mode selectionIn the STM32F20xxx/21xxx, three different boot modes can be selected by means of theBOOT[1:0] pins as shown in Table 1.The values on the BOOT pins are latched on the 4th rising edge of SYSCLK after a reset. It is up to the user to set the BOOT1 and BOOT0 pins after reset to select the required boot mode.The BOOT pins are also resampled when exiting the Standby mode. Consequently, they must be kept in the required Boot mode configuration in the Standby mode. After this startup delay has elapsed, the CPU fetches the top-of-stack value from address 0x0000 0000, and starts code execution from the boot memory starting from 0x0000 0004.3.2 Boot pin connectionFigure 10 shows the external connection required to select the boot memory of the STM32F20xxx/21xxx.1.Resistor values are given only as a typical example.Table 1.Boot modesBOOT mode selection pinsBoot mode AliasingBOOT1BOOT0x 0Main Flash memory Main Flash memory is selected as boot space01System memory System memory is selected as boot space11Embedded SRAMEmbedded SRAM is selected as boot spaceAN3320Boot configuration3.3 Embedded boot loader modeThe Embedded boot loader mode is used to reprogram the Flash memory using one of theavailable serial USART1(PA9/PA10), USART3(PB10/11 & PC10/11), CAN2(PB5/13) or USBOTG FS(PA11/12) in Device mode (DFU: device firmware upgrade).The USART peripheral operates with the internal 16MHz oscillator (HSI). The CAN andUSB OTG FS, however, can only function if an external clock (HSE) multiple of 1 MHz(between 4 and 26 MHz)is present.This embedded boot loader is located in the System memory and is programmed by STduring production.For additional information, refer to AN2606.Doc ID 18267 Rev 217/29Debug management AN332018/29 Doc ID 18267 Rev 24 Debug management4.1 IntroductionThe Host/Target interface is the hardware equipment that connects the host to theapplication board. This interface is made of three components: a hardware debug tool, a JTAG or SW connector and a cable connecting the host to the debug tool.Figure 11 shows the connection of the host to the evaluation board STM3220G-EVAL.Figure 11.Host-to-board connection 4.2 SWJ debug port (serial wire and JTAG)The STM32F20xxx/21xxx core integrates the serial wire / JT AG debug port (SWJ-DP). It is an ARM? standard CoreSight? debug port that combines a JTAG-DP (5-pin) interface and a SW-DP (2-pin) interface.●The JTAG debug port (JTAG-DP) provides a 5-pin standard JTAG interface to the AHP-AP port●The serial wire debug port (SW-DP) provides a 2-pin (clock + data) interface to the AHP-AP portIn the SWJ-DP , the two JTAG pins of the SW-DP are multiplexed with some of the five JTAG pins of the JTAG-DP .4.3 Pinout and debug port pinsThe STM32F20xxx/21xxx MCU is offered in various packages with different numbers of available pins. As a result, some functionality related to the pin availability may differ from one package to another.4.3.1 SWJ debug port pinsFive pins are used as outputs for the SWJ-DP as alternate functions of general-purpose I/Os (GPIOs). These pins, shown in Table 2, are available on all packages.%VALUATION BOARD(OST 0#0OWER SUPPLY*4!' 37 CONNECTOR$EBUG TOOLAI BAN3320Debug managementDoc ID 18267 Rev 219/294.3.2 Flexible SWJ-DP pin assignmentAfter reset (SYSRESETn or PORESETn), all five pins used for the SWJ-DP are assigned as dedicated pins immediately usable by the debugger host (note that the trace outputs are not assigned except if explicitly programmed by the debugger host).However, some of the JTAG pins shown in Table 3 can be configured to an alternate function through the GPIOx_AFRx registers.Table 3 shows the different possibilities to release some pins.For more details, see the STM32F20xxx/21xxx (RM0033) reference manual, available from the STMicroelectronics website /doc/20ec15b314791711cd7917a6.html .4.3.3 Internal pull-up and pull-down resistors on JTAG pinsThe JTAG input pins must not be floating since they are directly connected to flip-flops to control the debug mode features. Special care must be taken with the SWCLK/TCK pin that is directly connected to the clock of some of these flip-flops. Table 2.Debug port pin assignmentSWJ-DP pin nameJTAG debug portSW debug portPinassignment TypeDescription Type Debug assignment JTMS/SWDIO I JTAG test mode selection I/O Serial wire data input/output PA13JTCK/SWCLK I JTAG test clock I Serial wire clock P A14JTDII JTAG test data input --P A15JTDO/TRACESWO O JTAG test data output -TRACESWO if async traceis enabled PB3JNTRSTIJTAG test nReset。
stm32自学笔记共20页
•
LED0=1;
•
LED1=0;
•
delay_ms(300);
•
}
•}
第二章 跑马灯实验
• Led.c函数
• void LED_Init(void)
•{
•
RCC->APB2ENR|=1<<2; //使能PORTA时钟
•
GPIOA->CRH|=0XFFFFFFFF3;//PA8 推挽输出
•
GPIOA->ODR|=1<<8; //PA8 输出高
• JTAG_Set(JTAG_SWD_DISABLE);//关闭JTAG和SWD,在原理图上可以看 到PA13和PA15为键盘和JTAG与SWD所共用,而这两种方针接口,他们 和普通的IO口公用,当想使用普通IO口时,必须先把他们关闭。在这 个函数里面设置参数,如果为二进制数00,则代表全部使能,如果是 二进制数01,则是能SWD,如果是10,则表示全部关闭。JTAG是一种 国际标准测试协议,主要用于芯片内部的测试。
• }要想实现一个点亮led小灯的功能,最少只需对3个寄存器进行设 置,第一步是设置外设时钟使能先把PORTA时钟使能,接下来把IO
口设置为输出,在接下来设置输出为高电平还是低电平,这里使用 推挽输出(3.3v),推挽输出主要是增强驱动能力,为外部提供大电 流。
第二章 跑马灯实验
• #ifndef __LED_H • #define __LED_H • #include "sys.h" • #define LED0 PAout(8)// PA8 • #define LED1 PDout(2)// PD2 • void LED_Init(void);//初始化
《STM32库开发实战指南 基于STM32F103 第2版 》读书笔记思维导图
31.5 定时器初始化 结构体详解
31.6 PWM互补输 出实验
31.7 脉宽测量输入 捕获实验
31.8 PWM输入捕 获实验
32.1 电容按键 原理
32.2 电容按键 检测实验
33.1 IWDG简介
33.2 IWDG功能框 图剖析
33.3 怎么用IWDG
33.4 IWDG超时实 验
34.1 WWDG简介
11.2 软件设计
11.1 硬件设计
11.3 STM32标准 库补充知识
12.2 软件设计
12.1 硬件设计
12.3 下载验证
13.1 位带简介
13.2 GPIO位 带操作
14.2 查找ARM汇 编指令
14.1 启动文件简介
14.3 启动文件代码 讲解
15.2 RCC框图剖 析——时钟部分
4 40.4 操作内部
Flash的库函 数
5
40.5 实验:读 写内部Flash
41.1 选项字节与读 写保护
41.2 修改选项字节 的过程
41.3 操作选项字节 的库函数
41.4 实验:设置读 写保护及解除
42.2 OV7725摄像 头
42.1 摄像头简介
42.3 摄像头驱动实 验
43.1 Huawei Lite OS简...
18.2 Sys Tick寄存 器介绍
18.1 Sys Tick简介
18.3 Sys Tick定时 实验
19.1 串行通信与并 行通信
19.2 全双工、半双 工及单工通信
19.3 同步通信与异 步通信
19.4 通信速率
01
20.1 串口 通信协议简 介
02
20.2 STM32的 USART简 介
STM32笔记(六)SD卡的读写和FatFS文件系统
STM32笔记(六)SD卡的读写和FatFS文件系统因为要用,学习了一下SPI操作SD卡,同时移植了一个免费开源的FAT文件系统:FatFS。
感觉挺好,在单片机上实现了读写文件的操作,接下来就可以解释我的G代码咯!我的SD卡底层操作参考了网上几种常见的代码,但又对其结构做了一定的优化,至少看起来用起来比较方便。
既可以作为文件系统的diskio使用,也可以直接使用底层函数,把SD卡作为一块flash读写。
FatFs文件系统体积蛮小,6-7K足矣,对于128Kflash的STM32来说很合适,代价不大。
同时可移植性很高,最少只需要4个函数修改既可以实现文件系统的移植。
相关文件系统的介绍请看这里。
这里给一套比较完整的参考资料,包括fatfs文件系统的原版资料、几个重要的手册和网上下载的代码。
/bbs/bbs_content.jsp?bbs_sn=3210864&bbs_page_no=1&bbs_id=3020 下面是我的代码:其中底层的SPI总线对SD卡的操作在SPI_SD_driver.c/h中,而FATFS的移植文件diskio.c中对磁盘的操作函数中将调用底层的操作函数。
下面是一些底层操作函数:u8 SPI_ReadWriteByte(u8 TxData); //SPI总线读写一个字节u8 SD_WaitReady(void); //等待SD卡就绪u8 SD_SendCommand(u8 cmd, u32 arg, u8 crc); //SD卡发送一个命令u8 SD_SendCommand_NoDeassert(u8 cmd, u32 arg, u8 crc); //SD卡发送一个命令,不断线u8 SD_Init(void); //SD卡初始化u8 SD_ReceiveData(u8 *data, u16 len, u8 release); //SD卡读数据u8 SD_GetCID(u8 *cid_data); //读SD卡CIDu8 SD_GetCSD(u8 *csd_data); //读SD卡CSDu32 SD_GetCapacity(void); //取SD卡容量u8 SD_ReadSingleBlock(u32 sector, u8 *buffer); //读一个sectoru8 SD_WriteSingleBlock(u32 sector, const u8 *buffer); //写一个sectoru8 SD_ReadMultiBlock(u32 sector, u8 *buffer, u8 count); //读多个sectoru8 SD_WriteMultiBlock(u32 sector, const u8 *data, u8 count); //写多个sector这是diskio.c中的一段代码,在disk初始化中,我们调用了SPI_SD_driver.c中的SD卡初始化函数。
STM32F4学习笔记之SPI(使用固件库,非中断方式)
1.使能对应SPI模块时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE) for SPI1RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE) for SPI2RCC_APB1PeriphResetCmd(RCC_APB1Periph_SPI3, ENABLE) for SPI3.2.使能对应GPIO的时钟RCC_AHB1PeriphClockCmd() function. (SCK, MOSI, MISO and NSS ).3.配置对应引脚的复用功能GPIO_PinAFConfig(GPIOx, GPIO_PinSourcex, GPIO_AF_SPIx); //引脚映射GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; // 设置为推挽输出GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //复用模式GPIO_InitStructure.GPIO_Pin = GPIO_Pin_x ; //引脚选择GPIO_InitStructure.GPIO_Speed = GPIO_Speed_xxMHz; //速度选择GPIO_Init(GPIOx, &GPIO_InitStructure); //写入配置信息4.配置SPI信息SPI_InitStructure.SPI_Direction = xxx;//工作模式SPI_Direction_2Lines_FullDuplex,SPI_Direction_2Lines_RxOnly等SPI_InitStructure.SPI_Mode = xxx; //主从模式选择SPI_Mode_Master,SPI_Mode_SlaveSPI_InitStructure.SPI_DataSize = xxx;//数据位选择SPI_DataSize_8b,SPI_DataSize_16bSPI_InitStructure.SPI_CPOL = xxx;//时钟空闲电平选择SPI_CPOL_High,SPI_CPOL_LowSPI_InitStructure.SPI_CPHA = xxx;//数据捕捉跳变沿选择SPI_CPHA_2Edge,SPI_CPHA_1EdgeSPI_InitStructure.SPI_NSS = xxx;//NSS信号由硬件还是软件控制SPI_NSS_Soft,SPI_NSS_HardSPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_x;//时钟分频选择SPI_InitStructure.SPI_FirstBit = xxx;//数据大小端选择SPI_FirstBit_MSB,SPI_FirstBit_LSBSPI_InitStructure.SPI_CRCPolynomial = 7;//CRC值计算的多项式SPI_Init(SPI1, &SPI_InitStructure);//写入配置信息5.发送while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);SPI_I2S_SendData(SPI1,u8 xxx);6.接收while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);SPI_I2S_ReceiveData(SPI1);程序举例:本例是对交换机芯片KSZ8873的配置宏定义:#define KSZ8873_SPI SPI1#define KSZ8873_SPI_CLK RCC_APB2Periph_SPI1#define KSZ8873_SPI_SCK_PIN GPIO_Pin_3#define KSZ8873_SPI_SCK_GPIO_PORT GPIOB#define KSZ8873_SPI_SCK_GPIO_CLK RCC_AHB1Periph_GPIOB #define KSZ8873_SPI_SCK_SOURCE GPIO_PinSource3#define KSZ8873_SPI_MISO_PIN GPIO_Pin_4#define KSZ8873_SPI_MISO_GPIO_PORT GPIOB#define KSZ8873_SPI_MISO_GPIO_CLK RCC_AHB1Periph_GPIOB #define KSZ8873_SPI_MISO_SOURCE GPIO_PinSource4#define KSZ8873_SPI_MOSI_PIN GPIO_Pin_5#define KSZ8873_SPI_MOSI_GPIO_PORT GPIOB#define KSZ8873_SPI_MOSI_GPIO_CLK RCC_AHB1Periph_GPIOB #define KSZ8873_SPI_MOSI_SOURCE GPIO_PinSource5#define KSZ8873_CS_PIN GPIO_Pin_15#define KSZ8873_CS_GPIO_PORT GPIOA#define KSZ8873_CS_GPIO_CLK RCC_AHB1Periph_GPIOA#define KSZ8873_CS_LOW() GPIO_ResetBits(KSZ8873_CS_GPIO_PORT, KSZ8873_CS_PIN) #define KSZ8873_CS_HIGH() GPIO_SetBits(KSZ8873_CS_GPIO_PORT, KSZ8873_CS_PIN)#define KSZ8873_WRITE_CMD 0x02#define KSZ8873_READ_CMD 0x03程序:void KSZ8873_SPI_Init(void){SPI_InitTypeDef SPI_InitStructure;GPIO_InitTypeDef GPIO_InitStructure;RCC_AHB1PeriphClockCmd(KSZ8873_CS_GPIO_CLK, ENABLE);GPIO_InitStructure.GPIO_Pin = KSZ8873_CS_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;GPIO_Init(KSZ8873_CS_GPIO_PORT, &GPIO_InitStructure);RCC_AHB1PeriphClockCmd(KSZ8873_SPI_SCK_GPIO_CLK | KSZ8873_SPI_MISO_GPIO_CLK |KSZ8873_SPI_MOSI_GPIO_CLK, ENABLE);RCC_APB2PeriphClockCmd(KSZ8873_SPI_CLK, ENABLE);GPIO_PinAFConfig(KSZ8873_SPI_SCK_GPIO_PORT, KSZ8873_SPI_SCK_SOURCE, GPIO_AF_SPI1);GPIO_PinAFConfig(KSZ8873_SPI_MISO_GPIO_PORT, KSZ8873_SPI_MISO_SOURCE,GPIO_AF_SPI1);GPIO_PinAFConfig(KSZ8873_SPI_MOSI_GPIO_PORT, KSZ8873_SPI_MOSI_SOURCE, GPIO_AF_SPI1);GPIO_InitStructure.GPIO_Pin = KSZ8873_SPI_SCK_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;GPIO_Init(KSZ8873_SPI_SCK_GPIO_PORT, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = KSZ8873_SPI_MISO_PIN;GPIO_Init(KSZ8873_SPI_MISO_GPIO_PORT, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = KSZ8873_SPI_MOSI_PIN;GPIO_Init(KSZ8873_SPI_MOSI_GPIO_PORT, &GPIO_InitStructure);KSZ8873_CS_HIGH();SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;SPI_InitStructure.SPI_Mode = SPI_Mode_Master;SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;SPI_InitStructure.SPI_CRCPolynomial = 7;SPI_Init(KSZ8873_SPI, &SPI_InitStructure);SPI_Cmd(SPI1, ENABLE);}void KSZ8873_SPI_SendByte(u8 addr,u8 byte){KSZ8873_CS_LOW();while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);SPI_I2S_SendData(KSZ8873_SPI, KSZ8873_WRITE_CMD);while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);SPI_I2S_ReceiveData(KSZ8873_SPI);while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);SPI_I2S_SendData(KSZ8873_SPI, addr);while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);SPI_I2S_ReceiveData(KSZ8873_SPI);while (SPI_I2S_GetFlagStatus(KSZ8873_SPI, SPI_I2S_FLAG_TXE) == RESET);SPI_I2S_SendData(SPI1, byte);while (SPI_I2S_GetFlagStatus(KSZ8873_SPI, SPI_I2S_FLAG_RXNE) == RESET);SPI_I2S_ReceiveData(KSZ8873_SPI);KSZ8873_CS_HIGH();}u8 KSZ8873_SPI_ReceiveByte(u8 byte){u8 i;KSZ8873_CS_LOW();while (SPI_I2S_GetFlagStatus(KSZ8873_SPI, SPI_I2S_FLAG_TXE) == RESET);SPI_I2S_SendData(SPI1, KSZ8873_READ_CMD);while (SPI_I2S_GetFlagStatus(KSZ8873_SPI, SPI_I2S_FLAG_RXNE) == RESET);SPI_I2S_ReceiveData(SPI1);while (SPI_I2S_GetFlagStatus(KSZ8873_SPI, SPI_I2S_FLAG_TXE) == RESET);SPI_I2S_SendData(SPI1, byte);while (SPI_I2S_GetFlagStatus(KSZ8873_SPI, SPI_I2S_FLAG_RXNE) == RESET);SPI_I2S_ReceiveData(SPI1);while (SPI_I2S_GetFlagStatus(KSZ8873_SPI, SPI_I2S_FLAG_TXE) == RESET);SPI_I2S_SendData(SPI1, byte);while (SPI_I2S_GetFlagStatus(KSZ8873_SPI, SPI_I2S_FLAG_RXNE) == RESET);i=SPI_I2S_ReceiveData(SPI1);KSZ8873_CS_HIGH();return i;}。
STM32学习资料
STM32学习心得赫丛奎主要内容STM32基础功能和涉及到的库函数功能简介➢1、GPIO➢2、时钟➢3、ADC➢4、USART、➢5、TIM/PWMGPIOGPIO 是STM32最常用的设备之一。
STM32可以提供最多达80个双向IO 口(视型号而定),他们分别布在A到E 这5个端口中。
每个端口有16个GPIO。
每个GPIO口都可以承受最大5V的管压降。
通过GPIO配置寄存器,开发人员可以把GPIO口配置成想要的工作模式,一共8 种可能的配置:(4 输入+2 输出+2复用输出)➢①浮空输入_IN_FLOATING➢②带上拉输入_IPU➢③带下拉输入_IPD➢④模拟输入_AIN➢⑤开漏输出_OUT_OD➢⑥推挽输出_OUT_PP➢⑦复用功能的推挽输出_AF_PP➢⑧复用功能的开漏输出_AF_OD硬件电路硬件电路如图,LED0和LED1分别通过一个1K的限流电阻连接在STM32的GPIO.2和GPIO.3上,另一端接GND程序设计要点1、配置RCC寄存器组,使用PLL输出72MHz时钟;2、配置GPIOA.2和GPIOA.3为推挽输出,最大翻转频率为50MHz3、通过在GPIOA.2和GPIOA.3上输出高电平点亮LED,反之输出低电平熄灭LEDGPIO试验工程文件组详情试验流程图时钟1、时钟源在STM32中,共有5个时钟源:HSI、HSE、LSI、LSE、PLL。
①、HSI是高速内部时钟,RC振荡器,频率为8MHz。
②、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。
③、LSI是低速内部时钟,RC振荡器,频率为40kHz。
④、LSE是低速外部时钟,接频率为32.768kHz的石英晶体。
⑤、PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。
倍频可选择为2~16倍,但是其输出频率最大不得超过72MHz。
40kHz的LSI供独立看门狗IWDG使用,或实时时钟RTC的时钟源。
单片机STM32学习笔记
推挽输出与开漏输出的区别推挽输出推挽输出::可以输出高可以输出高,,低电平低电平,,连接数字器件连接数字器件; ;开漏输出开漏输出::输出端相当于三极管的集电极输出端相当于三极管的集电极. . 要得到高电平状态需要上拉电阻才行要得到高电平状态需要上拉电阻才行. . 适合于做电流型的驱动电流型的驱动,,其吸收电流的能力相对强其吸收电流的能力相对强((一般20ma 以内以内). ).推挽结构一般是指两个三极管分别受两互补信号的控制推挽结构一般是指两个三极管分别受两互补信号的控制,,总是在一个三极管导通的时候另一个截止另一个截止. .要实现“线与”需要用OC(open collector)collector)门电路门电路门电路..是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中以推挽方式存在于电路中,,各负责正负半周的波形放大任务各负责正负半周的波形放大任务,,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小关管每次只有一个导通,所以导通损耗小,,效率高。
输出既可以向负载灌电流,也可以从负载抽取电流。
抽取电流。
问题:问题:很多芯片的供电电压不一样,有3.3v 和5.0v 5.0v,需要把几种,需要把几种IC 的不同口连接在一起,是不是直接连接就可以了?实际上系统是应用在I2C 上面。
上面。
简答:简答:1、部分3.3V 器件有5V 兼容性,可以利用这种容性直接连接兼容性,可以利用这种容性直接连接2、应用电压转换器件,如TPS76733就是5V 输入,转换成3.3V 3.3V、、1A 输出。
输出。
开漏电路特点及应用在电路设计时我们常常遇到开漏(在电路设计时我们常常遇到开漏(open drain open drain )和开集()和开集()和开集(open collector open collector )的概念。
所)的概念。
所谓开漏电路概念中提到的“漏”就是指MOSFET 的漏极。
(stm32f103学习总结)—stm32定时器中断
(stm32f103学习总结)—stm32定时器中断⼀、定时器介绍 STM32F1的定时器⾮常多,由2个基本定时器(TIM6、TIM7)、4个通 ⽤定时器(TIM2-TIM5)和2个⾼级定时器(TIM1、TIM8)组成。
基本定 时器的功能最为简单,类似于51单⽚机内定时器。
通⽤定时器是在基本 定时器的基础上扩展⽽来,增加了输⼊捕获与输出⽐较等功能。
⾼级定 时器⼜是在通⽤定时器基础上扩展⽽来,增加了可编程死区互补输出、 重复计数器、带刹车(断路)功能,这些功能主要针对⼯业电机控制⽅⾯1.1 通⽤定时器简介 STM32F1的通⽤定时器包含⼀个 16 位⾃动重载计数器(CNT),该计 数器由可编程预分频器(PSC)驱动。
STM32F1的通⽤定时器可⽤于多种 ⽤途,包括测量输⼊信号的脉冲宽度(输⼊捕获)或者⽣成输出波形(输出 ⽐较和PWM)等。
使⽤定时器预分频器和 RCC 时钟控制器预分频器,脉 冲长度和波形周期可以在⼏个微秒到⼏个毫秒间调整。
STM32F1 的每个 通⽤定时器都是完全独⽴的,没有互相共享的任何资源。
STM32F1的通⽤定时器TIMx (TIM2-TIM5 )具有如下功能:(1)16 位向上、向下、向上/向下⾃动装载计数器(TIMx_CNT)。
(2)16 位可编程(可以实时修改)预分频器(TIMx_PSC),计数器时钟频率的分频系数为 1~65535之间的任意数值。
(3)4个独⽴通道(TIMx_CH1-4),这些通道可以⽤来作为: A.输⼊捕获 B.输出⽐较 C. PWM ⽣成(边缘或中间对齐模式) D.单脉冲模式输出(4)可使⽤外部信号(TIMx_ETR)控制定时器,且可实现多个定时器互连(可以⽤1个定时器控制另外⼀个定时器)的同步电路。
(5)发⽣如下事件时产⽣中断/DMA请求: A.更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发) B.触发事件(计数器启动、停⽌、初始化或者由内部/外部触发计数) C.输⼊捕获 D.输出⽐较(6)⽀持针对定位的增量(正交)编码器和霍尔传感器电路(7)触发输⼊作为外部时钟或者按周期的电流管理1.2 通⽤定时器结构框图我们把通⽤定时器结构框图分成 5 个⼦模块,按照顺序依次进⾏简单介绍。
STM32实现IAP功能的学习笔记--转载
STM32实现IAP功能的学习笔记--转载STM32实现IAP功能的学习笔记最近因项⽬需求要实现STM32的在线升级即IAP功能,先将这⼏天的学习体会和IAP的具体实现总结出来,分享给⼤家,希望对同样实现IAP 的童鞋有所帮助,⽂中最后会上传名为STM32_Update.zip的压缩⽂件⾥⾯包含了STM32_App、STM32_MyBoot_V1.0和升级软件STM32_UpdateSoftware的源码⽂件供⼤家参考。
所有程序都经过测试,可以直接在原⼦哥的上跑,上位机的升级软件⼤家可以直接打开STM32_Update\STM32_UpdateSoftware\Release\STM32_UpdateSoftware.exe来升级,如果需要查看源码请⽤VS2010打开⼯程⽂件。
最终要实现的是:单⽚机每次上电会先运⾏Boot程序,检查标志位如果标志位为FLAG_TO_APP则直接跳转到App程序运⾏,如果标志位为FLAG_TO_BOOT,则运⾏Boot程序准备升级。
在运⾏App程序时,当接收到升级的指令后会在FLASH中的某处空间写下升级的标志位FLAG_TO_BOOT,并且加载Boot程序,Boot程序会接受新的程序⽂件并且存储在相应的FLASH空间⾥,完成升级后会在标志位的空间写下FLAG_TO_APP,并且运⾏新的程序。
帖⼦包含如下⼏个⽅⾯:1. 什么是IAP?2. STM32的启动模式?3. STM32的FLASH分布?4. STM32程序的运⾏过程?5. BootLoader程序的编写(如何实现程序的动态加载)?6. App程序的编写?7. bin⽂件的转换?8. 上位机串⼝升级软件的简介-------------------------------------------------------------------------------------------------1. 什么是IAP?IAP的知识⽹上的各种资料也说的⽐较明⽩,在此简单介绍⼀下。
STM32学习笔记,定时器,PWM,ADC,UART,DMA
RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD,\ ENABLE); //启动 AFIO RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //启动 TIM1 RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
//Step2. GPIO 做相应设置,为 AF 输出 //PA.8/9 口设置为 TIM1 的 OC1 输出口 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure);
}
关于 TIM 的操作,要注意的是 STM32 处理器因为低功耗的需要,各模块需要分别独立开启时钟,所以, 一定不要忘记给用到的模块和管脚使能时钟,因为这个原因,浪费了我好多时间阿~~!
STM32 笔记(二)TIM 模块产生 PWM 这个是 STM32 的 PWM 输出模式,STM32 的 TIM1 模块是增强型的定时器模块,天生就是为电机控制而生,可 以产生 3 组 6 路 PWM,同时每组 2 路 PWM 为互补,并可以带有死区,可以用来驱动 H 桥。
STM32_深入浅出(新手必看)
STM32学前班教程之一:为什么是它经过几天的学习,基本掌握了STM32的调试环境和一些基本知识。
想拿出来与大家共享,笨教程本着最大限度简化删减STM32入门的过程的思想,会把我的整个入门前的工作推荐给大家。
就算是给网上的众多教程、笔记的一种补充吧,所以叫学前班教程。
其中涉及产品一律隐去来源和品牌,以防广告之嫌。
全部汉字内容为个人笔记。
所有相关参考资料也全部列出。
:lol教程会分几篇,因为太长啦。
今天先来说说为什么是它——我选择STM32的原因。
我对未来的规划是以功能性为主的,在功能和面积之间做以平衡是我的首要选择,而把运算放在第二位,这根我的专业有关系。
里面的运算其实并不复杂,在入门阶段想尽量减少所接触的东西。
不过说实话,对DSP的外设并和开发环境不满意,这是为什么STM32一出就转向的原因。
下面是我自己做过的两块DSP28的全功能最小系统板,在做这两块板子的过程中发现要想尽力缩小DSP的面积实在不容易(目前只能达到50mm×45mm,这还是没有其他器件的情况下),尤其是双电源的供电方式和1.9V的电源让人很头疼。
后来因为一个项目,接触了LPC2148并做了一块板子,发现小型的ARM7在外设够用的情况下其实很不错,于是开始搜集相关芯片资料,也同时对小面积的AVR和51都进行了大致的比较,这个时候发现了CortexM3的STM32,比2148拥有更丰富和灵活的外设,性能几乎是2148两倍(按照MIPS值计算)。
正好2148我还没上手,就直接转了这款STM32F103。
与2811相比较(核心1.8V供电情况下),135MHz×1MIPS。
现在用STM32F103,72MHz×1.25MIPS,性能是DSP的66%,STM32F103R型(64管脚)芯片面积只有2811的51%,STM32F103C型(48管脚)面积是2811的25%,最大功耗是DSP的20%,单片价格是DSP的30%。
学习stm32工作总结
学习stm32工作总结
学习STM32工作总结。
作为一名嵌入式系统工程师,学习STM32是非常重要的。
STM32是一款由意法半导体公司(STMicroelectronics)推出的32位ARM Cortex-M微控制器系列,广泛应用于各种嵌入式系统中。
在我学习STM32的过程中,我积累了许多经验和总结,现在我将分享一些关键的工作总结。
首先,学习STM32需要掌握C语言和汇编语言。
C语言是STM32的主要编程语言,而汇编语言则是在一些特殊情况下需要用到的。
我发现通过系统地学习这两种语言,我能更好地理解STM32的工作原理和编程方法。
其次,了解STM32的内部结构和外设功能是非常重要的。
STM32微控制器具有丰富的外设,包括通用定时器、通用异步串行接口、通用同步串行接口、通用串行外设接口等。
掌握这些外设的功能和使用方法,对于编写高效的嵌入式软件是至关重要的。
另外,熟练掌握STM32的开发工具和调试工具也是必不可少的。
例如,我经常使用ST-Link调试器和Keil MDK开发环境来进行STM32的软件开发和调试。
这些工具的熟练使用,可以大大提高工作效率和软件质量。
最后,学习STM32需要不断实践和总结。
在实际项目中,我经常遇到各种各样的问题和挑战,需要不断地学习和总结。
通过不断地实践和总结,我逐渐积累了丰富的经验,提高了自己的技术水平。
总的来说,学习STM32是一项持续的工作。
通过不断地学习和实践,我相信我会不断提高自己的技术水平,为今后的工作做好准备。
希望我的工作总结能够对其他学习STM32的人有所帮助。
STM32-USART1学习笔记
USART具有10个中断源,只有一个接口连接到中断控制器(USART的各种中断事件被连接到同一个中断向量),因此在进入中断时需要软件判断发生的是哪个中断。
USART1串口配置前三步如上节所述①②③,接下来配置串口使能中断
④USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); //使能接收数据寄存器不为空产生中断
}GPIO_InitTypeDef;
************************************/
配置USART1的RX(PA10)引脚
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
使能相应串口中断(如果需要中断)
开启相应串口,至此,串口配置完成
static void Task3Usart1(void *pdata)
{
CPU_INT08U TxCounter = 0;
pdata = pdata;
while(1)
{
while(TxCounter < strlen(TxBuffer))
{
USART_SendData(USART1, TxBuffer[TxCounter++]);//串口发送函数
{
USART_ClearITPendingBit(USART1, USART_FLAG_RXNE);//产生中断,清除中断标志
USART1RXData = USART_ReceiveData(USART1); //接收串口数据
STM32单片机应用与全案例实践stm32自学笔记第二版pdf
STM32单⽚机应⽤与全案例实践stm32⾃学笔记第⼆版pdf STM32单⽚机应⽤与全案例实践pdfhttps:///s/16WrivuLcHvLTwS__Zcwl6Q4rj3stm32⾃学笔记第⼆版 pdfhttps:///share/init?surl=hsjGIXm6k5ustm32⾃学笔记第⼀版pdf/down1/stm32zxbj_downcc.zip/soft/317742.html第1章如何学习STM32 (1)1.1 学习STM32必须具备的知识基础(1)1.2 STM32的基本架构和基本原理(2)1.2.1 什么是ARM (2)1.2.2 什么是STM32 (3)1.2.3 STM32的内部结构(3)1.2.4 典型型号—STM32F103ZET6 (5)1.2.5 STM32的时钟树(5)1.3 学习STM32的最好⽅法是什么(9)1.4 学习STM32需要哪些⼯具或平台(9)1.4.1 硬件平台(10)1.4.2 软件平台(11)1.5 STM32程序开发的模式(12)1.5.1 基于寄存器的开发模式(13)1.5.2 基于ST固件库的开发模式(20)1.5.3 基于操作系统的开发模式(26)1.5.4 三种编程模式的选⽤建议(27)思考题(27)第2章如何调试STM32 (28)2.1 STM32单⽚机的最⼩系统(28)2.2 STM32⼯程模板的建⽴(30)2.2.1 STM32的固件库(Standard Peripherals Library)(30)2.2.2 新建⼯程模板第⼀步—拷贝固件库⽂件(34)2.2.3 新建⼯程模板第⼆步—新建⼀个KEIL⼯程(35)2.2.4 关于创建⼯程模板的简单⼩结(41)2.3 程序的烧写(42)2.3.1 基于串⼝的程序下载(烧写)⽅式(42)2.3.2 基于JTAG(SWD)的程序下载(烧写)⽅式(44)2.4 程序的调试(46)2.5 模板的使⽤(48)2.6 三个GPIO输出的范例—STM32中实现延时的三种常⽤⽅法(48)2.6.1 我的第⼀个LED⼯程—基于延时函数的延时(48)2.6.2 我的第⼆个LED⼯程—SysTick中断延时(50)2.6.3 我的第3个⼯程—定时器中断延时(52)2.7 GPIO⼝的各种输出⽅式及其应⽤(55)2.7.1 功能要求(55)2.7.2 程序实现(56)2.8 本章⼩结(58)思考题(59)第3章 GPIO及其应⽤—输⼊(60)3.1 单功能按键输⼊(60)3.1.1 实现思想(60)3.1.2 具体程序(61)3.2 复⽤功能按键输⼊(64)3.2.1 按键复⽤的基本概念(64)3.2.2 程序实现举例(64)3.3 ⾮按键类开关信号输⼊及其实现(67)3.3.1 GPIO的输⼊⽅式及其特点(67)3.3.2 程序实现(68)3.4 GPIO输⼊输出⼩结(69)思考题(70)第4章 TIMER与PWM (71)4.1 关于STM32的定时器概述(71)4.2 STM32定时器的简单应⽤(72)4.2.1 按周期输出⽅波的例⼦(72)4.2.2 实现原理(72)4.2.3 具体程序(72)4.3 STM32定时器的复杂应⽤—检测输⼊⽅波的频率(77)4.3.1 STM32定时器的其他特性(77)4.3.2 本例设计要求(78)4.3.3 硬件接⼝设计与测量原理(79)4.3.4 具体程序(79)4.4 PWM原理及其应⽤⼀—⼀个LED呼吸灯的实现(84)4.4.1 PWM的基本概念及其基本应⽤(84)4.4.2 STM32的PWM的实现原理(84)4.4.3 基于PWM的LED呼吸灯的实现思路(88)4.4.4 呼吸灯的实现程序(89)4.5 PWM原理及其应⽤⼆—通过L298N控制电机转速(96)4.5.1 硬件设计(96)4.5.2 直流电机调速与调向的原理(97)4.5.3 程序实现(97)思考题(104)第5章 USART及其应⽤(105)5.1 串⾏通信模块USART的基本应⽤要点(105)5.1.1 STM32的USART及其基本特性(105)5.1.2 STM32的USART应⽤的基本要领(106)5.2 ⼀个USART的通信实现(STM32与PC)—查询法(107)5.2.1 功能要求(107)5.2.2 实现难点(108)5.2.3 程序实现(108)5.2.4 USART应⽤的有关事项(114)5.3 ⼀个USART的通信实现(STM32与PC)—中断法(115)5.3.1 功能要求及通信协议设计(115)5.3.2 程序算法(115)5.3.3 本例的源程序(116)5.4 两个USART的通信实现(124)5.4.1 功能要求与通信协议(124)5.4.2 接⼝设计(124)5.4.3 程序实现(125)5.5 USART应⽤⼩结(139)思考题(141)第6章⼈机界⾯—按键输⼊与液晶显⽰(142)6.1 STM32与液晶模块12864的接⼝实现(142)6.1.1 STM32与液晶模块12864的接⼝实现—延时法(142)6.1.2 STM32与液晶模块12864的接⼝实现—查询“忙”状态(153)6.2 基于液晶模块12864的菜单实现(173)6.2.1 程序中菜单的种类与菜单化程序的优势(173)6.2.2 基于液晶模块12864的菜单实现实例(173)6.3 矩阵键盘的接⼝实现(186)6.3.1 矩阵键盘的应⽤与程序设计思想(186)6.3.2 4×4矩阵键盘的硬件设计(186)6.3.3 演⽰程序(187)6.4 本章⼩结(198)思考题(199)第7章同步串⾏接⼝总线SPI与I2C (200)7.1 STM32的SPI (200)7.1.1 SPI概述(200)7.1.2 STM32之SPI总线的应⽤要点(201)7.2 SPI的接⼝应⽤及其实现(202)7.2.1 STM32与OLED12864液晶模块的SPI接⼝(202)7.2.2 STM32的SPI1与OLED12864的接⼝程序(203)7.3 STM32的I2C总线(223)7.3.1 I2C总线的基本概念(223)7.3.2 STM32的I2C总线应⽤要领(226)7.4 STM32的I2C总线的应⽤举例(227)7.4.1 具有I2C接⼝的DS3231时钟模块(227)7.4.2 STM32与DS3231时钟模块的硬件接⼝(229)7.4.3 STM32与DS3231的软件接⼝及其演⽰实例(229)7.5 I2C总线稳健性设计(247)思考题(247)第8章 ADC、DAC与DMA及其应⽤(248)8.1 STM32的DMA (248)8.1.1 STM32的DMA及其基本特性(248)8.1.2 STM32的DMA原理及其配置要点(249)8.2 STM32的ADC (251)8.2.1 STM32的ADC的基本特性(251)8.2.2 STM32的ADC的程序流程与编程要点(253)8.3 ⼀个三通道A/D转换的范例(254)8.3.1 功能要求与⽅案设计(254)8.3.2 实现程序(256)8.3.3 本例的中断法实现(263)8.4 STM32的DAC (266)8.4.1 DAC概述(266)8.4.2 DAC的配置要领(266)8.4.3 DAC应⽤实例(268)思考题(277)第9章⼯程实例—基于线性CCD的⼩车循迹系统(278)9.1 系统要求(278)9.2 线性CCD的原理及其使⽤(278)9.2.1 线性CCD传感器原理(279)9.2.2 线性CCD传感器应⽤(280)9.2.3 硬件接⼝(281)9.3 ⾃适应曝光的算法设计(281)9.3.1 ⾃适应曝光算法(281)9.3.2 模块化架构(283)9.4 具体程序(285)9.4.1 ⼯程⽂件视图—⽂件结构(285)9.4.2 程序源代码(286)9.5 系统性能实测(315)9.5.1 系统实物与测试环境(315)9.5.2 系统实测结果(316)思考题(318)参考⽂献(319)。
STM32知识
STM32知识1、 SYSCLK时钟源有三个来源:HSI RC、HSE OSC、PLL2、 MCO[2:0]可以提供4源不同的时钟同步信号,PA83、 GPIO口有两个反向串联的二极管用作钳位二极管。
4、 ICode总线,DCode总线、系统总线、DMA总线、总线矩阵、AHB/APB桥5、在使用一个外设之前,必须设置寄存器RCC_AHBENR来打开该外设的时钟6、 STM32复位有三种:系统复位、上电复位、备份区域复位。
其中系统复位除了RCC_CSR中的复位标志和BKP中的数值不复位之外,其他的所有寄存器全部复位。
触发方式例如外部复位、看门狗复位、软件复位等;电源复位由于外部电源的上电/掉电复位或者待机模式返回。
复位除了BKP中的寄存器值不动,其他全部复位;备份区域复位的触发源为软件复位或者VDD和VBAT全部掉电时。
7、 (NestedVectored Interrupt Controller)NVIC嵌套向量中断控制器,分为两种:抢先式优先级(可嵌套)和中断优先级(副优先级,不能嵌套)。
两种优先级由4位二进制位决定。
分配下来有十六种情况:8、自动装载寄存器和影子寄存器:前者相当于51当中的溢出设定数值。
而影子寄存器顾名思义是影子,就是寄存器的另一分copy。
实际起作用的是影子寄存器,而程序员操纵的则是自动装载寄存器。
如果APPE位使能,表明自动装载寄存器的值在下一次更新事件发生后才写入新值。
否则,写入自动装载寄存器的值会被立即更新到影子寄存器。
9、计数器的数值与输出比较器相等时,翻转输出信号10、ARM公司只生产内核标准,不生产芯片。
ST、TI这样的公司从ARM公司那里购买内核,然后外加自己的总线结构、外设、存储器、时钟和复位、I/O后就组成了自己的芯片。
中,TPAD可以用一块覆铜区域来替代,通过电容的充放电常数来确定是否按下。
屏幕的对应表PAGE2单独列出来:13、USART可以操纵SPI设备。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
超详细的STM32单片机学习笔记汇总
1、AHB系统总线分为APB1(36MHz)和APB2(72MHz),其中2>1,意思是APB2接高速设备
2、Stm32f10x.h相当于reg52.h(里面有基本的位操作定义),另一个为stm32f10x_conf.h 专门控制外围器件的配置,也就是开关头文件的作用
3、HSE Osc(High Speed External Oscillator)高速外部晶振,一般为8MHz,HSI RC(High Speed InternalRC)高速内部RC,8MHz
4、LSE Osc(Low Speed External Oscillator)低速外部晶振,一般为32.768KHz,LSI RC (Low Speed InternalRC)低速内部晶振,大概为40KHz左右,提供看门狗时钟和自动唤醒单元时钟源
5、SYSCLK时钟源有三个来源:HSI RC、HSE OSC、PLL
6、MCO[2:0]可以提供4源不同的时钟同步信号,PA8
7、GPIO口貌似有两个反向串联的二极管用作钳位二极管。
8、总线矩阵采用轮换算法对系统总线和DMA进行仲裁
9、ICode总线,DCode总线、系统总线、DMA总线、总线矩阵、AHB/APB桥
10、在使用一个外设之前,必须设置寄存器RCC_AHBENR来打开该外设的时钟
11、数据字节以小端存储形式保存在存储器中
12、内存映射区分为8个大块,每个块为512MB
13、 FLASH的一页为1K(小容量和中容量),大容量是2K。
14、系统存储区(SystemMemory)为ST公司出厂配置锁死,用户无法编辑,用于对FLASH 区域进行重新编程。
所以我们烧写程序务必选择BOOT1 = 0,这样通过内嵌的自举程序对FLASH进行烧写,比如中断向量表和代码
15、STM32核心电压为1.8V。