找回密码
 立即注册
查看: 185|回复: 5

32芯片IO配置自动生成

[复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:14
  • 最近打卡:2025-04-24 10:49:05

6

主题

8

回帖

184

积分

注册会员

积分
184
发表于 2025-3-4 17:24:45 | 显示全部楼层 |阅读模式
使用EXCEL表格填写IO模式及定义,使用宏程序一键复制初始化代码,支持LQFP32、LQFP64封装
截图202503041721399347.jpg


通过以下程序进行初始化配置


#include "GPIO.h"

/*===========================================================================================================================        
                                **GPIO模式配置函数**
                                
*参数*          Pn:IO口组号   *p:模式代号字符串(长度固定8个字符)        Pu:是否启用内部上拉电阻(加载"BIN.h"文件,使用二进制代入)   Init:IO初始状态电平

*返回值*         -1:模式字符错误                -2:Pn端口数据错误    1:执行完成

*声明*                1、代号高位在前,代号允许空格符间隔;        2、使能内部4.1k上拉电阻采用虚拟二进制表达时需严格按照BIN.h文件中的格式,格式高位在前

*用法*                GPIO(0,"SSSSKKKK",B0000_1010,B0000_0000);//P0.0到P0.3设置为开漏模式,P0.4到P0.7设为双向口 使能P0.2和P0.3的上拉电阻,IO初始状态为0000 0000   

        PnM0  PnM1      MOD               代号
        0                        0                                准双向口                                'S'
        0                        1                                高阻输入                                'Z'
        1                        0                                推挽输出                                'T'
        1                        1                                开漏输出                                'K'
        
===========================================================================================================================*/
char GPIO(char Pn,char *p,unsigned char Pu,char Init)
{
        char Mod0=0,Mod1=0;//模式配置缓存
        char i=8;//字符串检索长度,固定8个
        uchar psw2 = 0;
        
        psw2 = P_SW2;//记录当前权限状态
        
        while(i--)//检索字符串配置
        {
                Mod0 <<= 1;
                Mod1 <<= 1;
               
                switch (*p++)//匹配字符命令
                {
                        case 'S':                         //准双向口
                                Mod0 &= 0xFE;//最低位设0
                                Mod1 &= 0xFE;//最低位设0
                                break;
                        case 'Z':                         //高阻输入
                                Mod0 &= 0xFE;//最低位设0
                                Mod1 |= 0x01;//最低位设1
                                break;
                        case 'T':                         //推挽输出
                                Mod0 |= 0x01;//最低位设1
                                Mod1 &= 0xFE;//最低位设0
                                break;        
                        case 'K':                         //开漏输出
                                Mod0 |= 0x01;//最低位设1
                                Mod1 |= 0x01;//最低位设1
                                break;
                        case ' ':                         //空格符
                                i++;                                  //忽略本次循环
                                Mod0 >>= 1;         //移动回来
                                Mod1 >>= 1;         //移动回来
                                break;
                                
                        default:                //非法字符
                                return -1;//返回错误
                                break;
                }        
        }
        
        P_SW2 |= 0x80;//使能访问XFR外设端口寄存器
        switch (Pn)                //配置模式、上拉电阻、初始电平
        {
                case 0://P0口配置
                        P0M0=Mod0;        P0M1=Mod1; P0PU=Pu;        P0=Init;
                        break;
                case 1://P1口配置
                        P1M0=Mod0;        P1M1=Mod1; P1PU=Pu;        P1=Init;
                        break;
                case 2://P2口配置
                        P2M0=Mod0;        P2M1=Mod1; P2PU=Pu;        P2=Init;
                        break;
                case 3://P3口配置
                        P3M0=Mod0;        P3M1=Mod1; P3PU=Pu;        P3=Init;
                        break;
                case 4://P4口配置
                        P4M0=Mod0;        P4M1=Mod1; P4PU=Pu;        P4=Init;
                        break;
                case 5://P5口配置
                        P5M0=Mod0;        P5M1=Mod1; P5PU=Pu;        P5=Init;
                        break;
                case 6://P6口配置
                        P6M0=Mod0;        P6M1=Mod1; P6PU=Pu;        P6=Init;
                        break;
                case 7://P7口配置
                        P7M0=Mod0;        P7M1=Mod1; P7PU=Pu;        P7=Init;
                        break;
                        
                default:                                //非法数据
                        P_SW2 &=~0x80;//禁能访问XFR外设端口寄存器
                        return -2;                //返回错误
                        break;
        }
        P_SW2 = psw2;//还原权限状态
        return 1;                                 //返回完成
}


BIN.h

6.18 KB, 下载次数: 3

二进制数值文件

GPIO.c

2.66 KB, 下载次数: 3

IO初始化函数

GPIO.h

145 Bytes, 下载次数: 3

知识改变命运,技能成就梦想!
回复

使用道具 举报 送花

3

主题

1160

回帖

1031

积分

等待验证会员

积分
1031
发表于 2025-3-4 17:28:00 | 显示全部楼层
STC32芯片的IO配置自动生成工具通过EXCEL表格简化了开发流程。用户只需在表格中填写IO模式及定义,即可利用宏程序一键生成初始化代码,显著提升了开发效率。该工具支持LQFP32和LQFP64封装,适应多种应用场景。

初始化配置程序示例如下:
  1. c
  2. #include "GPIO.h"
  3. /*===========================================================================================================================        
  4.                                 **GPIO模式配置函数**
  5. ===========================================================================================================================*/
  6. void GPIO_Config(void) {
  7.     // 根据EXCEL表格生成的代码自动配置IO模式
  8.     // 示例代码
  9.     P0M1 = 0x00; P0M0 = 0xFF; // 配置P0口为推挽输出
  10.     P1M1 = 0xFF; P1M0 = 0x00; // 配置P1口为开漏输入
  11.     // 更多配置根据用户定义自动生成
  12. }
复制代码

此工具不仅减少了手动编写代码的错误率,还大幅缩短了开发周期,适用于批量生产和快速原型开发。建议开发者充分利用这一工具,以提升项目效率。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

3

主题

1160

回帖

1031

积分

等待验证会员

积分
1031
发表于 2025-3-4 17:33:00 | 显示全部楼层
针对32芯片的IO配置自动生成,采用EXCEL表格进行IO模式及定义的输入,结合宏程序实现一键复制初始化代码,极大提升了开发效率。该方案支持LQFP32、LQFP64等多种封装形式,适用于不同硬件平台。通过调用GPIO库中的配置函数,开发者可快速完成IO初始化。以下为示例代码:
  1. c
  2. #include "GPIO.h"
  3. /*===========================================================================================================================        
  4.                                 **GPIO模式配置函数**
  5. void GPIO_Config(void) {
  6.     // 根据EXCEL表格生成的配置代码
  7.     GPIO_InitTypeDef GPIO_InitStruct = {0};
  8.     // 配置示例
  9.     GPIO_InitStruct.Pin = GPIO_PIN_0;
  10.     GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  11.     GPIO_InitStruct.Pull = GPIO_NOPULL;
  12.     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  13.     HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  14. }
复制代码

此方法简化了IO配置流程,降低了出错率,适用于大规模项目开发。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:487
  • 最近打卡:2025-05-01 15:22:54
已绑定手机

27

主题

693

回帖

1950

积分

金牌会员

打工人

积分
1950
发表于 2025-3-11 05:25:05 | 显示全部楼层
好办法
打工人
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:518
  • 最近打卡:2025-05-01 05:52:49
已绑定手机

46

主题

1694

回帖

2540

积分

金牌会员

积分
2540
发表于 2025-3-11 07:49:55 | 显示全部楼层
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:37
  • 最近打卡:2025-04-30 07:59:31
已绑定手机

0

主题

3

回帖

196

积分

注册会员

积分
196
发表于 2025-4-22 20:34:08 | 显示全部楼层
这个好!收藏了
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-5-1 22:00 , Processed in 0.121008 second(s), 88 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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