乘风飞扬 发表于 2023-1-24 16:53:16

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库函数使用说明”。




神农鼎 发表于 2023-1-24 17:20:24



目标,不懂原理,也可以应用,离开数据手册也能开发,自成体系
===不看数据手册,绝对成不了专家绝对也是真的

在整合收集意见中,有建议就在这个贴中跟贴,用库简单,写库难,
大家先看下我们已有的库,再多提一针见血的容易实施的宝贵建议


通过说明书的书签很容易就能找到需要查询的库函数介绍位置,了解它的用法以及输入参数和返回值:

https://www.stcaimcu.com/data/attachment/forum/202303/09/183646im2j0g1w1mt141j1.png

chhome 发表于 2023-1-25 17:04:05

不错不错,支持完善

另:强烈不建议在单片机寄存器的头文件,如STC32G.h这样的文件中存在扩展的宏定义,如运算类、设置类的宏定义,包括数据类型的别名定义也不要放在这里,只保留寄存器的定义即可,需要这类的定义的话,采用单独的头文件即可,不要混在一起,官方例程的头文件有些乱。

神农鼎 发表于 2023-1-25 17:19:17

STC32G.h这样的文件中存在扩展的宏定义,如运算类、设置类的宏定义,包括数据类型的别名定义
===已经有了,可能就不会变了,否则会更乱,只能维持这种强势头文件风格了,一直这样下去,就是标准了

现在大家一起来完善 STC32的库文件,方便大家快速上手

LAOXU 发表于 2023-1-30 18:59:30

强烈建议 输入输出端口 设置, 改成如下(和数据手册命名相对应!!!), 否则没法进行多层次的宏定义:

#define        GPIO_PullUp                0        //上拉准双向口
#define        GPIO_OUT_PP                1        //推挽输出
#define        GPIO_HighZ                2        //浮空输入
#define        GPIO_OUT_OD                3        //开漏输出




LAOXU 发表于 2023-1-30 19:05:41

建议增加 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);

LAOXU 发表于 2023-1-30 19:07:23

                           ===========编 程 实 例===========

                               ------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模式

LAOXU 发表于 2023-1-30 19:10:38

以上所列实例, 如风格及格式 认可, 我整理一下相关宏定义, 上传

LAOXU 发表于 2023-2-1 06:18:10

宏定义我整理了一下, 在 C51编译环境下, 效果十分理想, 代码长度达到 汇编级, 经 C51优化后, 代码长度还可缩短.

这是完全未优化的(0级):



这是C51正常编译(优化的):


LAOXU 发表于 2023-2-1 06:24:46

但在 C251编译环境下, 效果非常差,代码长度超长, 代码质量极差, 看来这宏定义要重新进行人工优化, 以适应C251编译环境.



C251 编译结果:

页: [1] 2 3 4 5
查看完整版本: STC32库函数20230318版更新