STC32库函数20230318版更新
STC32库函数 20230318版上线及权威使用指南更新1.UART串口 函数库,在头文件添加阻塞模式/队列模式设置选择定义,可通过定义选择串口发送模式;
2.更新“STC32库函数使用说明”。
====不懂原理,也可以应用,离开数据手册也能开发 / 那是努力的方向,自成体系
https://www.stcaimcu.com/data/attachment/forum/202301/24/172024tjjrjuxvryx2sius.png
为了方便初学者使用,快速的上手使用STC的单片机进行开发,STC制作了库函数例程包,
将单片机各个模块的寄存器配置通过函数封装起来,用户只要传递参数给函数并进行调用,
就可以完成寄存器的配置,不用花太多的时间精力去研究单片机寄存器的功能和用法,
极大的提升了开发速度。
用户在使用库函数例程包过程中可能还是会遇到各种各样的问题,所以我们打算写一份详细点
的使用说明,方便大家快速的熟悉与上手。这几天搭建了一个框架,大家有什么意见和建议可以
跟帖留言,我们一起来制作完善。
20230318, STC32G库函数例程包更新如下:
1.UART串口 函数库,在头文件添加阻塞模式/队列模式设置选择定义,可通过定义选择串口发送模式;
2.更新“STC32库函数使用说明”。
目标,不懂原理,也可以应用,离开数据手册也能开发,自成体系
===不看数据手册,绝对成不了专家绝对也是真的
在整合收集意见中,有建议就在这个贴中跟贴,用库简单,写库难,
大家先看下我们已有的库,再多提一针见血的容易实施的宝贵建议
通过说明书的书签很容易就能找到需要查询的库函数介绍位置,了解它的用法以及输入参数和返回值:
https://www.stcaimcu.com/data/attachment/forum/202303/09/183646im2j0g1w1mt141j1.png
不错不错,支持完善
另:强烈不建议在单片机寄存器的头文件,如STC32G.h这样的文件中存在扩展的宏定义,如运算类、设置类的宏定义,包括数据类型的别名定义也不要放在这里,只保留寄存器的定义即可,需要这类的定义的话,采用单独的头文件即可,不要混在一起,官方例程的头文件有些乱。 STC32G.h这样的文件中存在扩展的宏定义,如运算类、设置类的宏定义,包括数据类型的别名定义
===已经有了,可能就不会变了,否则会更乱,只能维持这种强势头文件风格了,一直这样下去,就是标准了
现在大家一起来完善 STC32的库文件,方便大家快速上手
强烈建议 输入输出端口 设置, 改成如下(和数据手册命名相对应!!!), 否则没法进行多层次的宏定义:
#define GPIO_PullUp 0 //上拉准双向口
#define GPIO_OUT_PP 1 //推挽输出
#define GPIO_HighZ 2 //浮空输入
#define GPIO_OUT_OD 3 //开漏输出
建议增加 Pn IO口整体 MODE 设置,
建议改写 下列函数, 用宏定义代替, (几条指令就能解决的事, 搞的那么复杂, 又是指针又是判断, 增加 N条无关指令, 看了头大)
typedef struct
{
u8 Mode; //IO模式, GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
u8 Pin; //要设置的端口
} GPIO_InitTypeDef;
u8 GPIO_Inilize(u8 GPIO, GPIO_InitTypeDef *GPIOx); ===========编 程 实 例===========
------Cortex-M051风格1------
1.void GPIO_SET_MODE(Pn, b7,b6,b5,b4,b3,b2,b1,b0); // 设置IO口输入输出模式(n=0-4)
使用方式:
GPIO_SET_MODE(P3, PullUp,HighZ,PullUp,HighZ,OUT_PP,OUT_OD,OUT_PP,OUT_OD);
// 设置P3口的bit.7-bit.0位,依次为PullUp,HighZ,PullUp,HighZ,OUT_PP,OUT_OD,OUT_PP,OUT_OD模式
2.void GPIO_SET_PIN_MODE(Port, PinN, PINmode); // 设置IO口其中1位或数位输入输出模式(N=0-4,i=0-7)
例如:
GPIO_SET_PIN_MODE(P3, OUT_OD_Pin6); // 设置P3口的第bit.6位为OUT_OD模式
GPIO_SET_PIN_MODE(P2, PullUp_Pin5 | OUT_PP_Pin2 | HighZ_Pin0); // 设置P2口的第bit.5位为PullUp模式,第bit.2位为OUT_PP模式,第bit.0位为HighZ模式
------Cortex-M051风格2------
3.void Pn_SET_MODE(b7,b6,b5,b4,b3,b2,b1,b0); // 设置Pn IO口输入输出模式(n=0-4)
使用方式:
P3_SET_MODE(PullUp,HighZ,PullUp,HighZ,OUT_PP,OUT_OD,OUT_PP,OUT_OD);
// 设置P3口的bit.7-bit.0位,依次为PullUp,HighZ,PullUp,HighZ,OUT_PP,OUT_OD,OUT_PP,OUT_OD模式
4.void Pn_SET_PIN_MODE(Port, PinN, PINmode); // 设置Pn IO口其中1位或数位输入输出模式(N=0-4,i=0-7)
例如:
P3_SET_PIN_MODE(OUT_OD_Pin6); // 设置P3口的第bit.6位为OUT_OD模式
P2_SET_PIN_MODE(PullUp_Pin5 | OUT_PP_Pin2 | HighZ_Pin0); // 设置P2口的第bit.5位为PullUp模式,第bit.2位为OUT_PP模式,第bit.0位为HighZ模式
-------51系列风格-------
5.u8 GPIO_Mode(b7,b6,b5,b4,b3,b2,b1,b0);设置IO口输入输出模式
使用方式:
PnMode = GPIO_Mode(b7,b6,b5,b4,b3,b2,b1,b0);设置IO口输入输出模式
P3Mode = GPIO_Mode(PullUp,HighZ,PullUp,HighZ,OUT_PP,OUT_OD,OUT_PP,OUT_OD);
// 设置P3口的bit.7-bit.0位,依次为PullUp,HighZ,PullUp,HighZ,OUT_PP,OUT_OD,OUT_PP,OUT_OD模式
以上所列实例, 如风格及格式 认可, 我整理一下相关宏定义, 上传 宏定义我整理了一下, 在 C51编译环境下, 效果十分理想, 代码长度达到 汇编级, 经 C51优化后, 代码长度还可缩短.
这是完全未优化的(0级):
这是C51正常编译(优化的):
但在 C251编译环境下, 效果非常差,代码长度超长, 代码质量极差, 看来这宏定义要重新进行人工优化, 以适应C251编译环境.
C251 编译结果: