找回密码
 立即注册
查看: 23264|回复: 48

STC32库函数20230318版更新

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:415
  • 最近打卡:2025-04-30 09:58:34
已绑定手机

39

主题

2006

回帖

6841

积分

论坛元老

积分
6841
发表于 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, 下载次数: 1358

STC32G-SOFTWARE-LIB-20230318.zip

12.14 MB, 下载次数: 709

回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

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

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


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


  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2025-03-26 10:27:44

0

主题

14

回帖

140

积分

注册会员

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

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

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

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

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

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5395

积分

荣誉版主

积分
5395
发表于 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

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5395

积分

荣誉版主

积分
5395
发表于 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);
  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5395

积分

荣誉版主

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

  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5395

积分

荣誉版主

积分
5395
发表于 2023-1-30 19:10:38 | 显示全部楼层
以上所列实例, 如风格及格式 认可, 我整理一下相关宏定义, 上传
  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5395

积分

荣誉版主

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

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


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

  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5395

积分

荣誉版主

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



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

本版积分规则

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

GMT+8, 2025-5-2 06:32 , Processed in 0.212663 second(s), 109 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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