不乏网络上的大神,可以兼顾“寄存器”和“库函数”,达到“信手拈来”的地步;对初学者而言,可能会力有不逮;笔者在“初学51单片机”后,感到“51”实在性能有限,但不得不说,能够把“51单片机”玩转的人简直是“神人”,私下一对比,本人即放弃了这条“成神之路”;
之后在正想学习下ARM系列单片机时,由于机缘巧合,接触到“STM32系列单片机”时,已经有“库函数”出来了,因此直接跳过了“AVR”、“MSP430”直接跨到了“STM32系列单片机”;
在学习“51单片机”时,其为“8bit单片机”,且“寄存器数目很少”,将“对应的头文件”(.h文件)看完,耗时也不会超过“1小时”;而对“stm32”而言,其为“32bit单片机”,即使是“单个外设”所涉及到的“寄存器数目”就已经很吓人;本人当时选择了“库函数”,曾经写的第一段代码为:
/*
********************************************************************************
** 函数名称 : void GPIO_Configuration(void)
** 函数功能 : GPIO配置函数,启动PA、PB所有时钟,及复用时钟;
** 输 入: 无
** 输 出: 无
** 返 回: 无
** 注意事项 : 无
** 完成进度 : 已完成,2012-09-16
********************************************************************************
*/
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE )
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 |GPIO_Pin_2 |GPIO_Pin_3 |GPIO_Pin_12
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP// 推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz// 最高输出速率50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure)// 选择A端口
}
简单配置后,就可以通过“GPIO_SetBits()”或“GPIO_ResetBits()”函数实现“高低电平的控制”;如上代码所示,代码中不涉及具体的“寄存器”,只使用了“库函数”;但“库函数”的底层“仍旧为寄存器”,只是“大神”将“复杂的寄存器”进行了封装,演变成了“库函数”;
但需注意:“库函数”可极大提高代码的复用性,但其与“底层寄存器”仍有“千丝万缕的关联”;因此,不能只为方便,彻底舍弃“寄存器方式”;需根据具体情况,适时选用“合适的编程方式”进行“代码编写”;譬如对常规“GPIO *** 作”主要有3种:“置高”、“置低”、“取反”,对“STM32F103”而言,写法举例如下:
#definePC1_H GPIO_SetBits(GPIOC, GPIO_Pin_1) // PC1 高电平
#definePC1_L GPIO_ResetBits(GPIOC, GPIO_Pin_1) // PC1低电平
#define GPIO_ReversedGPIO_WriteBit(GPIOB, GPIO_Pin_5,(BitAction)(1 - (GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_5))))
注意:“取反”借助库函数“GPIO_WriteBit()”配合“GPIO_ReadOutputDataBit()读取函数”、“(BitAction)枚举强制转换”3者共同实现;同时,对“取反”而言,也可使用“自主编写取反函数,使用if判断实现”,但推荐使用“宏定义方式”实现,其能有效提高代码的“可读性”、“可维护性”;
最后,需明确无论是“寄存器”或是“库函数”,其本质仍是“编程工具”,“编程”的核心是“数据结构+算法”,即“编程思路”;因此,切忌舍本逐末,变成“为编程而编程”;
本人设计单片机有10多年的经验了,从stm32出来到现在也一直在用,我还是认为用寄存器版本比较好,比较灵活,有好多人说直接用库函数方便,方便是方便,当你搞大型程序的时候就知道了,问题一大堆你找都不知道去哪里找,因为你不懂库函数里面的东西,库函数不是你写的。有好多配置库函数是没有给修改入口的。什么adc的缓冲呀!等等。所以建议你还是用寄存器版本为好欢迎分享,转载请注明来源:内存溢出
评论列表(0条)