请选择 进入手机版 | 继续访问电脑版

 找回密码
 立即注册
查看: 17635|回复: 41

STC32库函数20230318版更新

[复制链接]
  • TA的每日心情
    奋斗
    昨天 10:55
  • 签到天数: 119 天

    [LV.6]常住居民II

    26

    主题

    1226

    回帖

    3841

    积分

    论坛元老

    积分
    3841
    发表于 2023-1-24 16:53:16 | 显示全部楼层 |阅读模式
    STC32库函数 20230318版上线及权威使用指南更新
    1.  UART串口 函数库,在头文件添加阻塞模式/队列模式设置选择定义,可通过定义选择串口发送模式;
    2.  更新“STC32库函数使用说明”。
    ====不懂原理,也可以应用,离开数据手册也能开发 / 那是努力的方向,自成体系


    为了方便初学者使用,快速的上手使用STC的单片机进行开发,STC制作了库函数例程包,
    将单片机各个模块的寄存器配置通过函数封装起来,用户只要传递参数给函数并进行调用,
    就可以完成寄存器的配置,不用花太多的时间精力去研究单片机寄存器的功能和用法,
    极大的提升了开发速度。

    用户在使用库函数例程包过程中可能还是会遇到各种各样的问题,所以我们打算写一份详细点
    的使用说明,方便大家快速的熟悉与上手。这几天搭建了一个框架,大家有什么意见和建议可以
    跟帖留言,我们一起来制作完善。
    STC32库函数20230318版及权威使用指南更新,改进意见征集中-1.png

    20230318, STC32G库函数例程包更新如下:
    1.  UART串口 函数库,在头文件添加阻塞模式/队列模式设置选择定义,可通过定义选择串口发送模式;
    2.  更新“STC32库函数使用说明”。




    STC32库函数使用说明-20230318.pdf

    11.7 MB, 下载次数: 962

    STC32G-SOFTWARE-LIB-20230318.zip

    12.14 MB, 下载次数: 343

    回复 送花

    使用道具 举报

    该用户从未签到

    547

    主题

    9137

    回帖

    1万

    积分

    管理员

    积分
    14045
    发表于 2023-1-24 17:20:24 | 显示全部楼层
    1.png
    2.png
    目标,不懂原理,也可以应用,离开数据手册也能开发,自成体系
    ===不看数据手册,绝对成不了专家绝对也是真的

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


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


    该用户从未签到

    0

    主题

    10

    回帖

    108

    积分

    注册会员

    积分
    108
    发表于 2023-1-25 17:04:05 | 显示全部楼层
    不错不错,支持完善

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

    使用道具 举报

    该用户从未签到

    547

    主题

    9137

    回帖

    1万

    积分

    管理员

    积分
    14045
    发表于 2023-1-25 17:19:17 | 显示全部楼层
    STC32G.h这样的文件中存在扩展的宏定义,如运算类、设置类的宏定义,包括数据类型的别名定义
    ===已经有了,可能就不会变了,否则会更乱,只能维持这种强势头文件风格了,一直这样下去,就是标准了

    现在大家一起来完善 STC32的库文件,方便大家快速上手
    回复 支持 1 反对 0 送花

    使用道具 举报

  • TA的每日心情
    开心
    4 小时前
  • 签到天数: 125 天

    [LV.7]常住居民III

    36

    主题

    833

    回帖

    3839

    积分

    荣誉版主

    积分
    3839
    发表于 2023-1-30 18:59:30 | 显示全部楼层
    强烈建议 输入输出端口 设置, 改成如下(和数据手册命名相对应!!!), 否则没法进行多层次的宏定义:

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




    回复 支持 1 反对 0 送花

    使用道具 举报

  • TA的每日心情
    开心
    4 小时前
  • 签到天数: 125 天

    [LV.7]常住居民III

    36

    主题

    833

    回帖

    3839

    积分

    荣誉版主

    积分
    3839
    发表于 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);
  • TA的每日心情
    开心
    4 小时前
  • 签到天数: 125 天

    [LV.7]常住居民III

    36

    主题

    833

    回帖

    3839

    积分

    荣誉版主

    积分
    3839
    发表于 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模式

  • TA的每日心情
    开心
    4 小时前
  • 签到天数: 125 天

    [LV.7]常住居民III

    36

    主题

    833

    回帖

    3839

    积分

    荣誉版主

    积分
    3839
    发表于 2023-1-30 19:10:38 | 显示全部楼层
    以上所列实例, 如风格及格式 认可, 我整理一下相关宏定义, 上传
  • TA的每日心情
    开心
    4 小时前
  • 签到天数: 125 天

    [LV.7]常住居民III

    36

    主题

    833

    回帖

    3839

    积分

    荣誉版主

    积分
    3839
    发表于 2023-2-1 06:18:10 | 显示全部楼层
    宏定义我整理了一下, 在 C51编译环境下, 效果十分理想, 代码长度达到 汇编级, 经 C51优化后, 代码长度还可缩短.

    这是完全未优化的(0级):
    未命名1.JPG


    这是  C51正常编译(优化的):
    未命名2.JPG

  • TA的每日心情
    开心
    4 小时前
  • 签到天数: 125 天

    [LV.7]常住居民III

    36

    主题

    833

    回帖

    3839

    积分

    荣誉版主

    积分
    3839
    发表于 2023-2-1 06:24:46 | 显示全部楼层
    但在 C251编译环境下, 效果非常差,  代码长度超长, 代码质量极差, 看来这宏定义要重新进行人工优化, 以适应  C251编译环境.



    C251 编译结果:
    未命名3.JPG
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-4-21 11:10 , Processed in 0.069711 second(s), 67 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表