首页>总结报告>32点总结(通用9篇)

32点总结(通用9篇)

时间:2024-03-19 11:26:03 总结报告

32点总结 第1篇

    GPIO输出控制,可以通过端口数据输出寄存器ODR、端口位设置/清除寄存器BSRR和端口位清除寄存器BRR这三个来控制。端口输出寄存器ODR是一个32位的寄存器,低16位有效,对应着IO0~IO15,只能以字的形式操作,一般使用寄存器操作。

    端口位清除寄存器BRR是一个32位的寄存器,低十六位有效,对应着IO0~IO15,只能以字的形式操作,可以单独对某一个位操作,写1清0。

    BSRR是一个32位的寄存器,低16位用于置位,写1有效,高16位用于复位,写1有效,相当于BRR寄存器。高16位我们一般不用,而是操作BRR这个寄存器,所以BSRR这个寄存器一般用来置位操作。

    综上:固件库LED GPIO初始化函数。

主函数

    注意void Time_Delay(volatile uint32_t Count)只是一个简陋的软件延时函数,如果小伙伴们有兴趣可以看一看MultiTimer,它是一个软件定时器扩展模块,可无限扩展所需的定时器任务,取代传统的标志位判断方式, 更优雅更便捷地管理程序的时间触发时序。

32点总结 第2篇

    :外设 xxx 应用函数库,这里面写好了操作 xxx 外设的所有常用的函数,我们使用库编程的时候,使用的最多的就是这里的函数。

    工程中新建 。

    在此文件中编写main函数后直接编译会报错:

    错误提示说SystemInit没有定义。从分析启动文件时我们知道。

    第五行第六行代码Reset_Handler调用了SystemInit该函数用来初始化系统时钟,而该函数是在库文件中实现的。我们重新写一个这样的函数也可以,把功能完整实现一遍,但是为了简单起见,我们在main文件里面定义一个SystemInit空函数,为的是骗过编译器,把这个错误去掉。

    关于配置系统时钟之后会出文章RCC时钟树详细介绍,主要配置时钟控制寄存器(RCC_CR)和时钟配置寄存器(RCC_CFGR)这两个寄存器,但最好是直接使用CubeMX直接生成,因为它的配置过程有些冗长。

    如果我们用的是库,那么有个库函数SystemInit,会帮我们把系统时钟设置成72M。

    现在我们没有使用库,那现在时钟是多少?答案是8M,当外部HSE没有开启或者出现故障的时候,系统时钟由内部低速时钟LSI提供,现在我们是没有开启HSE,所以系统默认的时钟是LSI=8M。

    如图,达到第四层级便是我们所熟知的固件库或HAL库的效果。当然库的编写还需要考虑许多问题,不止于这些内容。我们需要的是了解库封装的大概过程。

    将库封装等级分为四级来介绍是为了有层次感,就像打怪升级一样,进行认知理解的升级。

    我们都知道,操作GPIO输出分三大步:

32点总结 第3篇

    在STM32中,每个外设都有一个起始地址,叫做外设基地址,外设的寄存器就以这个基地址为标准按照顺序排列,且每个寄存器32位,(后面作为结构体里面的成员正好内存对齐)。

查表看到时钟由APB2外设时钟使能寄存器(RCC_APB2ENR)来控制,其中PB端口的时钟由该寄存器的位3写1使能。我们可以通过基地址+偏移量0x18,算出RCC_APB2ENR的地址为:0x40021018。那么使能PB口的时钟代码则如下所示:

    模式配置:

    同RCC_APB2ENR一样,GPIOB的起始地址是:0X4001 0C00,我们也可以算出GPIO_CRL的地址为:0x40010C00。那么设置PB0为通用推挽输出,输出速率为2M的代码则如下所示:

    同上,从手册中我们看到ODR寄存器的地址偏移是:0CH,可以算出GPIOB_ODR寄存器的地址是:0X4001 0C00 + 0X0C = 0X4001 0C0C。现在我们就可以定义GPIOB_ODR这个寄存器了,代码如下:

    第一层级:基地址宏定义完成用STM32控制一个LED的完整代码:

    第二层级:基地址宏定义+结构体封装

32点总结 第4篇

扑克牌32xxx是从牌九演变过来的一种玩法,更像是使用扑克牌来玩推锅游戏,牌桌上有4名玩家玩牌坐庄,其他人可以选择参与残局,而扑克32点的牌型包括皇帝、娘娘、小米对、人对以及娥对等,其中皇帝是最大的牌型,即黑桃A+黑桃3,这种牌型有十六道;娘娘也被叫做天对,由红桃Q和方块xxx;小米对被叫做地对,对应的牌型是红桃2+方块2。

扑克牌32点使用32张扑克牌,其中有11种扑克牌的牌面以成对的方式出现,即一共有22xxx;剩下的手牌则单独出现。

32点总结 第5篇

    上图,STM32f10xxx系统结构。

    从结构框图上看,Cortex-M3内部有若干个总线接口,以使CM3能同时取址和访内(访问内存),它们是:指令存储区总线(两条)、系统总线、私有外设总线。有两条代码存储区总线负责对代码存储区(即 FLASH 外设)的访问,分别是 I-Code 总线和 D-Code 总线。

    I-Code用于取指,D-Code用于查表等操作,它们按最佳执行速度进行优化。

    系统总线(System)用于访问内存和外设,覆盖的区域包括SRAM,片上外设,片外RAM,片外扩展设备,以及系统级存储区的部分空间。

    私有外设总线负责一部分私有外设的访问,主要就是访问调试组件。它们也在系统级存储区。

    从结构框图上看,STM32的外设有串口、定时器、IO口、FSMC、SDIO、SPI、I2C等,这些外设按照速度的不同,分别挂载到AHB、APB2、APB1这三条总线上。

    什么是寄存器?寄存器是内置于各个IP外设中,是一种用于配置外设功能的存储器,并且有想对应的地址。一切库的封装始于映射。

    是不是看的眼都花了,如果进行寄存器开发,就需要怼地址以及对寄存器进行字节赋值,不仅效率低而且容易出错。

    库的存在就是为了解决这类问题,将代码语义化。语义化思想不仅仅是嵌入式有的,前端代码也在追求语义特性。

32点总结 第6篇

    固件库函数:RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE)函数的原型为:

    当程序编译一次之后,把光标定位到函数/变量/宏定义处,按键盘的F12或鼠标右键的Go to definition of,就可以找到原型。固件库的底层操作的就是RCC外设的APB2ENR这个寄存器,宏RCC_APB2Periph_GPIOB的原型是:0x00000008,即(1<<3),还原成存器操作就是:RCC->APB2ENR |= 1<<<3。相比固件库操作,寄存器操作的代码可读性就很差,只有才查阅寄存器配置才知道具体代码的功能,而固件库操作恰好相反,见名知意。

32点总结 第7篇

    这个由端口配置寄存器来控制。端口配置寄存器分为高低两个,每4bit 控制一个IO 口,所以端口配置低寄存器:CRL 控制这IO 口的低8 位,端口配置高寄存器:CRH控制这IO 口的高8bit。

    在4 位一组的控制位中,CNFy[1:0] 用来控制端口的输入输出,MODEy[1:0]用来控制输出模式的速率,又称驱动电路的响应速度,注意此处速率与程序无关,GPIO引脚速度、翻转速度、输出速度区别输入有4种模式,输出有4种模式,我们在控制LED 的时候选择通用推挽输出。

    输出速率有三种模式:2M、10M、50M,这里我们选择2M。

32点总结 第8篇

    当我们开始调用库函数写代码的时候,有些库我们不需要,在编译的时候可以不编译,可以通过一个总的头文件来控制,该头文件主要代码如下:

    这里面包含了全部外设的头文件,点亮一个LED我们只需要RCC和GPIO 这两个外设的库函数即可,其中RCC控制的是时钟,GPIO控制的具体的IO口。所以其他外设库函数的头文件我们注释掉,当我们需要的时候就把相应头文件的注释去掉即可。

    这个头文件在这个头文件的最后面被包含,在第8296行:

    代码的意思是,如果定义了USE_STDPERIPH_DRIVER这个宏的话,就包含这个头文件。

    我们在新建工程的时候,在魔术棒选项卡C/C++中,我们定义了USE_STDPERIPH_DRIVER 这个宏,所以 这个头文件就被包含了,我们在写程序的时候只需要调用一个头文件:即可。

32点总结 第9篇

xxx柯林斯在他著名的《从优秀到卓越》一书中论证了做一只刺猬的重要性。在希腊寓言中,“狐狸知道很多事情,但刺猬知道一件大的事情”。刺猬在一件事上是卓越的,而狐狸在许多事情上是普普通通的。做一只刺猬要比做一只狐狸重要得多。想要在每件事上做到卓越,最后只能是什么事都没做好。选择有限的几个技能去学习是更好的策略。专注一个领域,你可以跟精通其他领域的人展开合作。但是如果你没有一个中心的领域,你就会失去与那些分清自己的长处优势的人为伍的资本。