1.对GPIO_Init(GPIOx,&GPIO_InitStructure)的理解:
“GPIO_Init(GPIOB, &GPIO_InitStructure)”这个函数,参数1”GPIOB“很好理解,就是GPIO的外设口B(也可以是A,C,D,E),第二个参数,该函数原型是这样的:
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
功能描述: 根据GPIO_InitStruct中指定的参数初始化外设GPIOx寄存器
输入参数1: GPIOx:x可以是A,B,C,D或者E,来选择GPIO外设
输入参数2: GPIO_InitStruct:指向结构GPIO_InitTypeDef的指针,包含了外设GPIO的配置信息。
2.STM32启动文件(Reset_Handler函数):
该文件主要实现目的:
设置初始SP;
设置初始PC=Reset_Handler;
设置向量表入口地址,并初始化向量表;
调用SystemInit,把系统时钟配制成72M,SystemInit在库文件system_stm32f10.c定义;
调转到标号_main,最终来到C程序文件;
第一行是程序注释,在汇编里面注释用的是“;”。
第二行是定义了一个子程序:Reset_Handler。
第三行EXPORT 表示Reset_Handler 这个子程序可供其他模块调用。
第四行和第五行IMPORT 说明SystemInit 和__main 这两个标号在其他文件,在链接的时候需要到其他文件去寻找。
SystemInit在库文件system_stm32f10x.c 实现,用来初始化STM32的一系列时钟,把系统时钟设置为72MHZ。STM32的时钟比51 单片机复杂,需要经过一系列的配置才能达到稳定运行的状态。
__main 其实不是我们定义的,当编译器编译时,只要遇到这个标号就会定义这个函数,该函数的主要功能是:负责初始化栈、堆,配置系统境,并在最后跳转到用户自定义的main函数,从此来到C的世界。
第六行把SystemInit 的地址加载到寄存器R0。
第七行程序跳转到R0 中的地址执行程序,之后系统的时钟就被设置成72MHZ。
第八行把_main 的地址加载到寄存器R0。
第九行程序跳转到R0 中的地址执行程序,执行完毕之后就去到我们熟知的C 世界。
第十行表示子程序的结束。
具体见博客:https://blog.csdn.net/EXC_Twisted_Fate/article/details/78643477
3.开漏输出和推挽输出:
开漏输出只能输出低电平,类似于三极管的集电极,要输出高电平需要上拉电阻才能输出。
推挽输出(push-pull output)既可以输出低电平,也可以输出高电平,其优点是可以直接驱动功耗不大的数字器件。
详细解释:https://blog.csdn.net/qq_27485531/article/details/81608784
4.Cortex-m3启动代码分析:
https://wenku.baidu.com/view/c1348c38591b6bd97f192279168884868662b841.html
5.嵌入式中.c和.h的区别:
https://blog.csdn.net/DP29syM41zyGndVF/article/details/79636836
简单点说:
.C:写具体函数
.H:是.C的头文件,里面包含函数的定义,供其他.C函数调用。
比如有USART.C和USART.H,我再MAIN.C里想用USART.C里的函数USART_INIT(),我在MAIN.C里需要加“#include"USART.H"”,然后用函数“USART_INIT()”
6.关于独立看门狗的预分频系数和重装载值:
具体解释看博客:https://blog.csdn.net/FelikZhang/article/details/79336750
比如:要改成看门狗的喂狗时间为2秒,可以设置看门狗时钟预分频值prer为5,rlr还是625。
7.关于_SysTick_Config()函数的SysTick时钟配置
Systick又叫系统嘀答定时器,是一个24位的硬件定时器。
具体解释见博客:https://blog.csdn.net/qq_36373500/article/details/78703904#
PWM(脉冲宽度调制)
PWM(Pulse Width Modulation)控制——脉冲宽度调制技术,通过对一系列脉冲的宽度进行调制,来等效地获得所需要波形(含形状和幅值)。
8.逻辑非运算符【!】
不等于运算符【!=】
9.FATFS----文件操作
FatFs是一个通用的文件系统模块,用于在小型嵌入式系统中实现FAT文件系统。FatFs 组件的编写遵循ANSI C(C89),完全分离于磁盘I/O层,因此不依赖于硬件平台。它可以嵌入到便宜的微控制器中,如 8051, PIC, AVR, ARM, Z80, RX等等,不需要做任何修改。
10.Ethernet 以太网
以太网(Ethernet)是一种计算机局域网技术。
以太网协议解决了局域网的点对点通信。
但是,以太网协议不能解决多个局域网如何互通,这由 IP 协议解决。IP 协议可以连接多个局域网。
路由器就是基于 IP 协议。局域网之间要靠路由器连接。
具体见:https://blog.csdn.net/hzp666/article/details/73480514
11.挂载SD卡:
挂载是将某个未使用的空间或可移动设备的存储空间指向一个目录,通过该目录就可以访问空间了。或者说挂载是为了让系统可以认识那个外围设备,如果不挂载,系统就不会加载你的设备。
12.跳线帽:
跳线帽的作用是控制线路板上电流流动的小开关。
主板跳线是主机板上的手动开关,通过跳线帽连接不同的跳线PIN,可以改变主板电路;
主板上最常见的跳线主要有两种,一种是只有两根针,另一部分是跳线帽;
跳线帽是一个可以活动的部件,外层是绝缘塑料,内层是导电材料,可以插在跳线针上面,将两根跳线针连接起来。
当跳线帽扣在两根跳线针上时是接通状态,有电流通过,我们称之为ON,反之不扣上跳线帽时,就说明是断开的,称之为OFF。
13. SPI是串行外设接口(Serial Peripheral Interface)的缩写。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,如今越来越多的芯片集成了这种通信协议,比如AT91RM9200。
14. MTBF,即平均故障间隔时间,英文全称是“Mean Time Between Failure”。是衡量一个产品(尤其是电器产品)的可靠性指标。单位为“小时”。它反映了产品的时间质量,是体现产品在规定时间内保持功能的一种能力。具体来说,是指相邻两次故障之间的平均工作时间,也称为平均故障间隔。概括地说,产品故障少的就是可靠性高,产品的故障总数与寿命单位总数之比叫“故障率”(Failure rate)。它仅适用于可维修产品。同时也规定产品在总的使用阶段累计工作时间与故障次数的比值为MTBF。磁盘阵列产品一般MTBF不能低于50000小时。
15. LabVIEW是一种程序开发环境,由美国国家仪器(NI)公司研制开发,类似于C和BASIC开发环境,但是LabVIEW与其他计算机语言的显著区别是:其他计算机语言都是采用基于文本的语言产生代码,而LabVIEW使用的是图形化编辑语言G编写程序,产生的程序是框图的形式。
16. VGA (视频传输标准)
VGA(Video Graphics Array)是IBM(补充:IBM(国际商业机器公司)或万国商业机器公司,简称IBM(International Business Machines Corporation)。)在1987年随PS/2机一起推出的一种视频传输标准,具有分辨率高、显示速率快、颜色丰富等优点,在彩色显示器领域得到了广泛的应用。不支持热插拔,不支持音频传输。
17. SWD协议是ARM内核调试器的一种通信协议。
JTAG和SWD是ARM板一种调试模式。Jlink,Ulink,Stlink等是实现这种模式的一种工具,JTAG的全称是Joint Test Action Group (测试行动联合组织),它是由几家主要电子制造商发起制订的PCB 和IC 测试标准,主要应用于电路的边界扫描测试和可编程芯片的在线系统编程。SWD,全称是Serial Wire Debug(串行调试),它的接线方式较JTAG简单,2线式:SWDIO--串行数据线、SWDCLK--串行时钟线,一般在设计PCB时,会预留4个2.54mm的排座,这种接线方式适合引脚少的芯片,充分利用芯片资源。
18.DSP(数字信号处理)
DSP 即数字信号处理技术, DSP芯片即指能够实现数字信号处理技术的芯片。DSP芯片是一种快速强大的微处理器,独特之处在于它能即时处理资料。DSP芯片的内部采用程序和数据分开的哈佛结构,具有专门的硬件乘法器,可以用来快速的实现各种数字信号处理算法。 在当今的数字化时代背景下, DSP 己成为通信、计算机、消费类电子产品等领域的基础器件。
19. BGA的全称Ball Grid Array(焊球阵列封装),它是在封装体基板的底部制作阵列焊球作为电路的I/O端与印刷线路板(PCB)互接。采用该项技术封装的器件是一种表面贴装器件。
20. ADC (模数转换器)
ADC,Analog-to-Digital Converter的缩写,指模/数转换器或者模数转换器。是指将连续变化的模拟信号转换为离散的数字信号的器件。真实世界的模拟信号,例如温度、压力、声音或者图像等,需要转换成更容易储存、处理和发射的数字形式。
21. DAC (数字模拟转换器)
DAC是数字模拟转换器(英语:Digital to analog converter,英文缩写:DAC)是一种将数字信号转换为模拟信号(以电流、电压或电荷的形式)的设备。在很多数字系统中(例如计算机),信号以数字方式存储和传输,而数字模拟转换器可以将这样的信号转换为模拟信号,从而使得它们能够被外界(人或其他非数字系统)识别。
22. I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。
23. CAN总线
CAN是控制器局域网络(Controller Area Network, CAN)的简称,是由以研发和生产汽车电子产品著称的德国BOSCH公司开发的,并最终成为国际标准(ISO 11898),是国际上应用最广泛的现场总线之一。
24. UART
通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART。它将要传输的资料在串行通信与并行通信之间加以转换。作为把并行输入信号转成串行输出信号的芯片,UART通常被集成于其他通讯接口的连结上。
25.USB OTG是USB On-The-Go的缩写,是近年发展起来的技术,2001年12月18日由USB Implementers Forum公布,主要应用于各种不同的设备或移动设备间的联接,进行数据交换,特别是PAD、移动电话、消费类设备。
26. DMA(Direct Memory Access,直接内存存取)
它允许不同速度的硬件装置来沟通,而不需要依赖于 CPU 的大量中断负载。否则,CPU 需要从来源把每一片段的资料复制到暂存器,然后把它们再次写回到新的地方。在这个时间中,CPU 对于其他的工作来说就无法使用。
27. CRC (循环冗余校验)
循环冗余校验(Cyclic Redundancy Check, CRC)是一种根据网络数据包或电脑文件等数据产生简短固定位数校验码的一种散列函数,主要用来检测或校验数据传输或者保存后可能出现的错误。它是利用除法及余数的原理来作错误侦测的。
28. SDIO(Secure Digital Input and Output) 安全数字输入输出卡,定义了一种外设接口。
29. modbus由MODICON公司于1979年开发,是一种工业现场总线协议标准。1996年施耐德公司推出基于以太网TCP/IP的modbus协议:modbusTCP。
Modbus协议是一项应用层报文传输协议,包括ASCII、RTU、TCP三种报文类型。
标准的Modbus协议物理层接口有RS232、RS422、RS485和以太网接口,采用master/slave方式通信。
详细见博客:https://www.jianshu.com/p/59c1259c3ebc
30. 同步动态随机存取内存(synchronous dynamic random-access memory,简称SDRAM)是有一个同步接口的动态随机存取内存(DRAM)。通常DRAM是有一个异步接口的,这样它可以随时响应控制输入的变化。而SDRAM有一个同步接口,在响应控制输入前会等待一个时钟信号,这样就能和计算机的系统总线同步。时钟被用来驱动一个有限状态机,对进入的指令进行管线(Pipeline)操作。这使得SDRAM与没有同步接口的异步DRAM(asynchronous DRAM)相比,可以有一个更复杂的操作模式。
31. UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768是UDP的正式规范。UDP在IP报文的协议号是17。
32. STM32-串口通讯协议usart(讲解)
https://blog.csdn.net/qq_33401098/article/details/81084770
https://blog.csdn.net/qq_33401098/article/details/81101476
https://blog.csdn.net/qq_33401098/article/details/81127890
33. NRZ指的是不归零码(NRZ,Non-Return to Zero),数字信号可以直接采用基带传输,所谓基带就是指基本频带。基带传输就是在线路中直接传送数字信号的电脉冲,这是一种最简单的传输方式,近距离通信的局域网都采用基带传输。
34. ANSI:美国国家标准学会(AMERICAN NATIONAL STANDARDS INSTITUTE: ANSI)
35. STM32中有一个全速功能的USB模块,其串行接口引擎需要一个频率为48MHz的时钟源。该时钟源只能从PLL输出端获取,可以选择为1.5分频或者 1分频,也就是,当需要使用USB模块时,PLL必须使能,并且时钟频率配置为48MHz或72MHz。
系统时钟SYSCLK最大频率为72MHz,它是供STM32中绝大部分部件工作的时钟源。
36. stm32之中断介绍
外部中断程序设计思路:
中断初始化,主要是完善三个结构体:
①GPIO_InitTypeDef (功能:IO配置)
②EXTI_InitTypeDef (功能:中断配置)
③NVIC_InitTypeDef (功能:中断优先级配置)
中断总结:
http://www.cnblogs.com/chineseboy/archive/2013/03/14/2956782.html(博主)
http://www.sohu.com/a/115663726_119709(博主2)
https://www.cnblogs.com/qsyll0916/p/6421224.html(翻载)
第一步,将一个I/O口配置成中断输入模式。
GPIO本身是没有中断功能神马的。如果硬要使他产生中断输入方式,就得将相应的端口映射到相应的外部事件上去。而其他外设是有中断功能的,直接使能/失能其中断即可,比如USART,直接开启其发送/接收中断,那么USART也就相应的采取中断方式进行工作了。
总结:
1)外部事件寄存器相关位清零;
2)设置输入端子的编号
3)设置端口编号
第二步,在需要的地方产生中断,然后将其所在的总线配置成中断源,然后填写中断结构体成员,就是配置外部事件的模式、触发条件、使能外部触发。
或者说:
对外部事件进行配置,包括外部事件线路的选择、触发条件、使能。GPIO口和外部事件是各自独立的,它们并不是一体的。第一步中,将GPIO口映射到某外部事件,可以看出GPIO和外部事件是两个不同的东西,GPIO的映射,是GPIO口搭了外部事件的一趟顺风车。所以,外部事件依然是要配置和使能的,不能说,将GPIO口映射到外部事件就可以产生中断了。
有个原则是,在配置某一线上的中断或者事件之前,先将该线上的中断/事件清零,再对线上的中断/事件进行配置。
第三步,配置中断,即:配置中断分组,以及中断优先级。
第四步,配置中断服务函数(入口函数)。即:你想让这个中断做什么。
注意,中断服务程序在写入口函数的时候,注意函数名的写法,只有如下3种命名方式。
(1)EXTI0_IRQHandler;EXTI Line 0
EXTI1_IRQHandler;EXTI Line 1
EXTI2_IRQHandler;EXTI Line 2
EXTI3_IRQHandler;EXTI Line 3
EXTI4_IRQHandler;EXTI Line 4
(2)EXTI9_5_IRQHandler;EXTI Line 5-9
(3)EXTI15_10_IRQHandler;EXTI Line 10-15
只要是中断线5后的就不能像前四个那样命名,他们有自己的方式。
库函数库函数;顾名思义是把函数放到库里..是别人把一些常用到的函数编完放到一个文件里,供别人用。别人用的时候把它所在的文件名用#include<>加到里面就可以了.一般是放到lib文件里的...
“字节”和“字”是两个不同的单位,1字节=8位,1字=2字节=16位,所以1个双字=32位,1个四字=64位
37. “程序员”型的计算器
具体见博客:https://blog.csdn.net/komtao520/article/details/86546609
38. stm32框架中,GPIO口是挂在APB2上的,APB2是连在AHB总线上的,AHB再连到总线矩阵上的,环环相套,牵一发而动全身。
39. C语言强制类型转换是通过类型转换运算来实现的。其一般形式为:(类型说明符)(表达式)其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。自动转换是在源类型和目标类型兼容以及目标类型广于源类型时发生一个类型到另一类的转换。例如: (float) a 把a转换为浮点型,(int)(x+y) 把x+y的结果转换为整型。
40. 指针的前面加*号,表示一个具体的值,也即是某个地址上具体的数据。
如:*(__IO uint32_t *) tmp |= EXTI_InitStruct->EXTI_Line;
41. A lower priority value indicates a higher priority 中文意思是:优先级值越低表示优先级越高。
中断优先级:
STM32(Cortex-M3)中有两个优先级的概念——抢占式优先级和响应优先级,有人把响应优先级称作'亚优先级'或'副优先级',每个中断源都需要被指定这两种优先级。
具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以嵌套低抢占式优先级的中断。
当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。
具体:https://zhidao.baidu.com/question/324407683.html