OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 308|回复: 7

STM32能否使用面向对象的形式开发

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2025-3-8
在线时间
0 小时
发表于 2025-3-8 11:01:32 | 显示全部楼层 |阅读模式
1金钱
请问STM32适合使用面向对象的方式开发吗,本人最近正在学习STM32的配置和C语言程序设计架构方面的知识,发现单单GPIO的配置如果使用手动配就很麻烦,更别说后面的I2C,SPI,USART等模块不只要配置这一部分的外设,还要配置对应的GPIO功能、定时器判断超时、DMA数据传输等,能否按照以下方式统筹各个模块的代码,关于内存和性能这一块我理解的还不是很深,能否有大佬讲解一下,万分感谢

#define Class_declare(class_name)           typedef struct class_name class_name
#define Class(class_name)                   struct class_name




#ifndef _BSP_GPIO_H_
#define _BSP_GPIO_H_

#include "stm32f10x.h"
#include "bsp_rcc.h"

Class_declare(GPIO_Config_Object);
Class_declare(GPIO_Object);

Class(GPIO_Config_Object){
    GPIOSpeed_TypeDef       GPIO_Speed;
    GPIOMode_TypeDef        GPIO_Mode;
};

Class(GPIO_Object){
    GPIO_TypeDef*           GPIOx;
    uint16_t                GPIO_Pin;
    GPIO_Config_Object      GPIO_Config;

    void (*init)(GPIO_Object* self);
    void (*reinit)(GPIO_Object* self, GPIO_Config_Object* GPIO_Config);
    void (*deinit)(GPIO_Object* self);
    void (*writebit)(GPIO_Object* self, uint8_t val);
    uint8_t (*readbit)(GPIO_Object* self);
    void (*toggle)(GPIO_Object* self);
};

static void gpio_init_imp(GPIO_Object* self);
static void gpio_reinit_imp(GPIO_Object* self, GPIO_Config_Object* GPIO_Config);
static void gpio_deinit_imp(GPIO_Object* self);
static void gpio_writebit_imp(GPIO_Object* self, uint8_t val);
static uint8_t gpio_readbit_imp(GPIO_Object* self);
static void gpio_toggle_imp(GPIO_Object* self);

#endif



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

807

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3856
金钱
3856
注册时间
2017-3-7
在线时间
1684 小时
发表于 2025-3-10 10:20:12 | 显示全部楼层
可以,而且hal库就是面向对象的,而且也支持c++
回复

使用道具 举报

70

主题

6761

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13068
金钱
13068
注册时间
2012-11-26
在线时间
3808 小时
发表于 2025-3-10 16:37:14 | 显示全部楼层
还是走正规路线吧,想面向对象的,去搞那个Arduino
回复

使用道具 举报

3

主题

93

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
457
金钱
457
注册时间
2014-3-7
在线时间
50 小时
发表于 2025-3-11 08:36:41 | 显示全部楼层
可是可以,我们也这样做了,就是低端的MCU不行,很占RAM。 因为你新建一个对象,都得占一个对应的RAM。
STM32?步进电机开发板
http://yonyon.taobao.com
回复

使用道具 举报

13

主题

270

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
5380
金钱
5380
注册时间
2017-8-14
在线时间
246 小时
发表于 2025-3-12 17:29:01 | 显示全部楼层
本帖最后由 zml13917492379 于 2025-3-12 17:31 编辑

可以的,我们一直用 C++ 编程的
class C_DIDOAIAO////在一个程序中仅能调用一次//
{
………
//Begin of 用户程序部分////用户可在这个空间里添加变量
     CTimer ztimledtryok;//测试用的一个定时器
//End of 用户程序部分////        
};   



zzz232001.JPG

开源CAN现场总线源程序使用说明.pdf (2.53 MB, 下载次数: 2)
详细资料扣扣群204408503自行下载
回复

使用道具 举报

8

主题

556

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2869
金钱
2869
注册时间
2016-5-13
在线时间
182 小时
发表于 2025-3-13 11:42:58 | 显示全部楼层
去了解一下hal库开发方式。去官网下载一个开发环境配置软件:STM32CubeMX。硬件配置时钟配置等都是傻瓜式的。不用去关心底层的配置了。
回复

使用道具 举报

8

主题

556

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2869
金钱
2869
注册时间
2016-5-13
在线时间
182 小时
发表于 2025-3-13 11:45:35 | 显示全部楼层
之前是有库函数的不想去写寄存器的。现在是有hal库的不想写库函数的了。
回复

使用道具 举报

34

主题

165

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
340
金钱
340
注册时间
2018-2-9
在线时间
127 小时
发表于 2025-3-19 13:17:00 | 显示全部楼层
可以的,底层配置交给cubemx就可以了,写业务逻辑使用c/c++混编有时候确实方便不少,看过一些大佬的代码,自己还没这么写过嘿嘿
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-4-3 03:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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