野火STM32f407学习笔记之中级篇(上)

目录

EXIT外部中断

SysTick(系统定时器)

系统定时器配置步骤

关键字 volatile

DMA

多个DMA请求一起来,怎么办/p>

I2C协议

软件模拟协议

硬件实现协议

oxgen注释/p>

 Browse Infomation

C语言中的作用


EXIT外部中断

EXIT外部中断步骤

1)使能IO口时钟,初始化IO口为输入。

2)使能SYSCFG时钟,设置IO口与中断线的映射关系。(SYSCFG_EXTILineConfig())

3)初始化线上中断,设置触发条件等。(exit_init())

4)配置中断分组(NVIC),并使能中断。

5)编写中断服务函数。(编写函数名称的时候,请往启动文件的 External Interrupts里)

SysTick(系统定时器)

SysTick也叫滴答定时器,它是一个24位的只能递减的定时器。存在于内核当中,嵌套在NVI众女,所有的Cortex_M内核的单片机都有这个定时器。

STM32F103系统定时器_吹沙拾金的博客-CSDN博客

这位博客主上有关于滴答定时器相关寄存器的详解。

系统定时器配置步骤

1.调用SysTick_Config()函数确定多久发生一次中断。

2.编写延时函数

 3.再system_stm32f4xx.c文件的SysTick_Handler函数中编写代码,让延时函数里的TimingDelay变量减减。

滴答定时器的函数里SysTick_LOAD_RELOAD_Msk变量跳不过之后的0xFFFFFFUL中的UL表示无符 长整形。

这个函数是个升级版,可以一看,理解思路。 

关键字 volatile

变量使用volatile修饰:告诉编译器,该变量随时会发生改变,买每使用该变量直接到内存中去取,而不是采用暂存再寄存器中的值。

通信

Bitrate —比特率:每秒钟传输的二进制位数,单位为比特每秒(bit/s);

Baudrate—波特率:表示每秒钟传输的码元个数。

在一个二进制表示一个码元的情况下Bitrate == Baudrate,两个二进制位表示一个码元Bitrate != Baudrate

串口的USART_BRR寄存器,有涉及到小数转二进制,以前没这么了解过,可以看看。

 USART

串口通信的步骤:

1.初始化时钟(串口时钟和GPIO时钟)

2.初始化引脚(记得设为复用功能)

3.串口引脚复用配置(GPIO_PinAFConfig())

4.串口初始化

5.中断配置(NVCI_init();和优先级)

6串口使能(按需求使能串口的接收中断USART_ITConfig())

DMA

DMA:Data Memory Access,直接存储访问。,汉语的意思就是直接内存访问,是一种不经过CPU而直接从内存了存取数据的数据交换模式。PIO模式下硬盘和内存之间的数据传输是由CPU来控制的;而在DMA模式下,CPU只须向DMA控制器下达指令,让DMA控制器来处理数的传送,数据传送完毕再把信息反馈给CPU,这样就很大程度上减轻了CPU资源占有率。DMA模式与PIO模式的区别就在于,DMA模式不过分依赖CPU,可以大大节省系统资源,二者在传输速度上的差异并不十分明显。DMA模式又可以分为Single-Word DMA(单字节DMA)和Multi-Word DMA(多字节DMA)两种

野火的STM32f407具有DMA1和DMA2.

 流:是数据传输的一条链路,每个DMA控制器有8条独立的数据流,每次传输的数据量最大为65535,如果数据的单位为字的话,那一次可以传输256KB。

通道:每个数据流有8个通道选择,每个通道对应不同的DMA请求。

 

多个DMA请求一起来,怎么办/strong>

1.软件阶段,DMA_SxCR:PL

2.硬件阶段,数据流编 小的优先级大。

同一个数据流只能使用一个通道,同一个DMA控制器可以使用多个数据流。

FIFO:源和目标之间的一个数据中转站。

每个数据流有4个字FIFO,阈值级别有1/4,1/2.3/4或满。DMA_SxFCR:FTH.在开启FIFO模式的时候,直接模式要禁止。

I2C协议

I2C通讯协议(Inter-Integrated Circuit)是由飞利浦(Philips)公司开发的,由于它的引脚少,硬件实现简单,可扩展性强,不需要USART、CAN等腾讯协议的外部收发设备,现在被广泛地使用在系统内多个集成电路(IC)间的通讯。 

总线:支持多个设备共用的信 线。 

一个主机多从机,每个连接到总线的设备都有一个独立的地址,主机通过地址来进行不同设备的访问。

总线通过上拉电阻接到电源,当I2C设备空闲时,会输高阻态,而当所有设备都空闲,全输出高阻态时,由上拉电阻把总线拉成高电平。

高阻态是一个数字电路里常见的术语,指的是电路的一种输出状态,既不是高电平也不是低电平,如果高阻态再输入下一级电路的话,对下级电路无任何影响,和没接一样,如果用万用表测的话有可能是高电平也有可能是低电平,随它后面接的东西定的。

三种传输模式:标准模式传输速率为100Kbit/s,和快速模式为400kbit/s,告诉模式下可达3.4Mbit/s.

I2C的地址由7位的数据为控制,最大值不超过2的8次方,也就是128.

连接到相同总线的IC数量受到总线的最大电容400pF限制。

发送完数据后,一定要把SDA总线拉高,释放控制权。 

软件模拟协议

使用CPU直接控制通讯引脚的电平,产生出符合腾讯协议的标准的逻辑。

硬件实现协议

由于STM32的I2C片上外设专门负责实现I2C通讯协议,只要配置 该外设,它就会自动根据协议要求产生通讯信 ,收发数据并缓存起来,CPU只要检测该外设的状态和访问数据寄存器,就能完成数据的收发。

 brief 简介 param 参数 retval 返回值  

这种注释方式称为doxgen注释。

Doxygen 是一个程序的文件产生工具,可将程序中的特定注释转换成为说明文件。通常我们在写程序时,或多或少都会写上注释,但是对于其它人而言,要直接探索程序里的注释,与打捞泰坦尼克 同样的辛苦。大部分有用的注释都是属于针对函数、类型等等的说明。所以,如果能依据程序本身的结构,将注释经过处理重新整理成为一个纯粹的参考手册,对于后面利用您的程序代码的人而言将会减少许多的负担。不过,反过来说,整理文件的工作对于您来说,就是沉重的负担。

 Browse Infomation

 这个选项在编译前记得勾上,它可以让我们在编译后按下F12或右击鼠标即可跳到函数相关内容。

C语言中的作用

1、#define的宏

宏定义是以“”换行,如:#define MAX(a,b) ((a) <(b) (b) : (a))

2、关键字的换行

关键字换行支持:(+ – * / % = , | & ^ ~ || && == !=)以及括 等,均能作为换行符 。

3、字符串的换行

换行的字符串最后,添加双引 ,下一行开头也加上双引 就可以。

如:char buf[128]; strcpy(buf, “1234567890ab ” “cdefg “);

上述示例等同于:char buf[128]; strcpy(buf, “1234567890abcdefg “);

 

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年1月23日
下一篇 2022年1月23日

相关推荐