打印
[STM8]

求问怎么学习复杂的编程方式

[复制链接]
2221|32
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
刚毕业的自动化学生,现在学st方面的应用。我看了下他们的给我实际产品的程序,感觉好难懂。就比如I2C,我在百度里搜出来的程序都很简单,我琢磨琢磨也就明白了,可公司给我的实际程序号复杂,里面每个用到的变量参数都有一个或几个宏定义,函数结构也很严谨,考虑到了各方面的可能出现的情况。我都是拿个本本一句一句用我能明白的话翻译过来再看的,看完了还有eep和数码管之类。学校里单片机的课程比重1/3,学的也一般般,上面那些学的时候也不觉多难,可真的做工程了觉得好难。有谁有经验能和我分享下吗,怎么去习惯大神们的编程方式
沙发
ticomi| | 2016-4-27 16:39 | 只看该作者
其实不复杂,看看就明白了。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
不舒服的舒服 + 1 很给力!
板凳
不舒服的舒服|  楼主 | 2016-4-27 17:09 | 只看该作者
ticomi 发表于 2016-4-27 16:39
其实不复杂,看看就明白了。

其实就是不复杂啊,可我看不懂。我想问的就是怎么快速从一到壹

使用特权

评论回复
地板
yklstudent| | 2016-4-27 17:47 | 只看该作者
楼主看的代码到底有多严谨,能分享下嘛?

使用特权

评论回复
5
yklstudent| | 2016-4-27 17:47 | 只看该作者
楼主看的代码到底有多严谨,能分享下嘛?

使用特权

评论回复
6
不舒服的舒服|  楼主 | 2016-4-28 15:54 | 只看该作者
yklstudent 发表于 2016-4-27 17:47
楼主看的代码到底有多严谨,能分享下嘛?

I2c_Soft_ResultType I2C_SOFT_Byte_Rx(BYTE *pRxData, BYTE LastByte)
////////////////////////////////////////////////////////////////////////////////
{
        uint8 BitNum;
        BYTE RxDataLocal;
        uint16 TimeOutCtr;

        I2c_SoftClockhigh();
        I2c_SoftClockSetInput();
        TimeOutCtr = I2C_SOFT_TIMEOUT_CNT;
        do
        {
        } while ((0 == I2c_SoftClockGetData()) && (0 < --TimeOutCtr));
        I2c_SoftClockSetOutput();
        if (0 < TimeOutCtr)
        {
                I2c_SoftClockLow();
                I2C_SOFT_BIT_DELAY();
                I2c_SoftDathigh();
                I2c_SoftDatSetInput();

                RxDataLocal = (BYTE)0;
                BitNum = 7;
                do
                {
                        I2c_SoftClockhigh();
                        I2C_SOFT_BIT_DELAY();
                        RxDataLocal |= ((I2c_SoftDatGetData() >> I2C_SOFT_PORT_DAT_BIT_POS) << BitNum);
                        I2c_SoftClockLow();
                        I2C_SOFT_BIT_DELAY();
                } while (0 < BitNum--);
                I2c_SoftDatSetOutput();
                (I2C_SOFT_RX_NOT_LAST_BYTE == LastByte) ? I2c_SoftDatLow():I2c_SoftDathigh();
                I2C_SOFT_BIT_DELAY();
                I2c_SoftClockhigh();

                *pRxData = RxDataLocal;

                return I2C_SOFT_SUCCESS;
        }

        return I2C_SOFT_FAILED;
}

使用特权

评论回复
7
sonicll| | 2016-4-28 16:04 | 只看该作者
无他,唯手熟尔。
看的多了,写的多了,你自己就会了,这是个长期积累的过程

使用特权

评论回复
8
不舒服的舒服|  楼主 | 2016-4-28 16:57 | 只看该作者
sonicll 发表于 2016-4-28 16:04
无他,唯手熟尔。
看的多了,写的多了,你自己就会了,这是个长期积累的过程 ...

好吧,那我问你下,I2c_SoftDatSetInput();这函数字面意思是设置SDA端口为输入模式,那像SDA_H,SDA_l这种端口拉高拉低总线需要用到这函数吗,还是说这只与调用I2c_SoftDatGetData()来输出数据有关

使用特权

评论回复
9
sonicll| | 2016-4-28 17:31 | 只看该作者
不舒服的舒服 发表于 2016-4-28 16:57
好吧,那我问你下,I2c_SoftDatSetInput();这函数字面意思是设置SDA端口为输入模式,那像SDA_H,SDA_l这种 ...

I2C的SDA管脚,对主机来说,发送数据的时候是输出管脚,接收从机数据时,是输入管脚,所以执行SDA_H,SDA_L这种操作之前,需要先把SDA设置为输出,而执行I2c_SoftDatGetData()读取从机数据时,就要先把SDA设置为输入

使用特权

评论回复
10
不舒服的舒服|  楼主 | 2016-4-28 17:51 | 只看该作者
sonicll 发表于 2016-4-28 17:31
I2C的SDA管脚,对主机来说,发送数据的时候是输出管脚,接收从机数据时,是输入管脚,所以执行SDA_H,SDA_ ...

可我百度好多程序都直接拉高拉低,没有I2c_SoftDatGetData()之类的代码,这样的是可有可无还是什么,这样做的好处是什么呢

使用特权

评论回复
11
aerwa| | 2016-4-28 18:09 | 只看该作者
为了保证动作可靠,很多会加个设置管脚类型的,也可以没有。不过上面那个IIC程序确实看的繁琐,你可以用宏定义去代替中间变换语句,这样就好看多了,也适合51风格。

使用特权

评论回复
12
aerwa| | 2016-4-28 18:11 | 只看该作者
慢慢来,你比我们强多了,刚毕业就用ST32了,那时候我们玩的还是台产汇编单片机,搞到现在还有点适应不了库风格。

使用特权

评论回复
13
不舒服的舒服|  楼主 | 2016-4-28 18:20 | 只看该作者
aerwa 发表于 2016-4-28 18:11
慢慢来,你比我们强多了,刚毕业就用ST32了,那时候我们玩的还是台产汇编单片机,搞到现在还有点适应不了库 ...

就是宏定义太多了,unsigned int都有好几个宏名呢,我都是拿小本本一句句翻译过来看的,我来了快两周了,说让我下周就做项目了,不会慢慢来不了啊,你们用汇编是从根本上去了解,学这些肯定容易。学校里学的东西根本不够看啊

使用特权

评论回复
14
aerwa| | 2016-4-28 20:55 | 只看该作者
你们要做个什么产品, IIC要和那个模块通讯呢? 你可以参照51与同类模块通讯的例子, 慢慢对照STM32, 其实你要明白 STM32 这些库文件只是操作寄存器,软件的内核还是在于你自己。

使用特权

评论回复
15
不舒服的舒服|  楼主 | 2016-4-29 08:47 | 只看该作者
aerwa 发表于 2016-4-28 20:55
你们要做个什么产品, IIC要和那个模块通讯呢? 你可以参照51与同类模块通讯的例子, 慢慢对照STM32, 其实 ...

你懂韦根吗,

使用特权

评论回复
16
wenunit| | 2016-4-29 10:41 | 只看该作者
这些东西,要沉淀的,哪里是想看就能看懂的,
有些就算明白意思,也不明白为什么这样做.
看完这些再好好理解为什么这么做,这是捷径.
能不能走通,那就看个人能力了.

使用特权

评论回复
17
不舒服的舒服|  楼主 | 2016-4-29 12:01 | 只看该作者
wenunit 发表于 2016-4-29 10:41
这些东西,要沉淀的,哪里是想看就能看懂的,
有些就算明白意思,也不明白为什么这样做.
看完这些再好好理解为 ...

谢谢

使用特权

评论回复
18
不舒服的舒服|  楼主 | 2016-4-29 12:02 | 只看该作者
19
cnb12345| | 2016-4-29 15:43 | 只看该作者

使用特权

评论回复
20
wahahaheihei| | 2016-4-29 19:26 | 只看该作者
一定要看官方的例程,而且是那个通过库函数操作的。这样才能高水平起跑线。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

52

帖子

0

粉丝