这一点小代码写了好久,到最后看到都想吐了。在办公室大佬的帮助下终于搞定了,过程这么艰难,当然也收获了许多。
1、用的是tm1652led驱动芯片。按照一位停止码+八位数据码+奇偶校验码+停止码的顺序发,本来用的是for循环,后面被大佬教育(用for循环的坏处是,会一直占用程序,中间需要传输时间,需要一直等待。占用程序时间,所以要避免使用for循环。)这种中间可能需要延时的,最好还是用状态机写。果然用状态机写,清晰多了。
2、定时器计时。写这个定时器的时候让我深刻理解到了写单片机的本质,就是通过往寄存器里面写值来设定自己想要的模式。后面的库函数啊什么的,其实就是把对寄存器里写的值封装起来,更易于对不太了解这款芯片的人,不用细读数据手册,可以很快的通过改值,置1置0来实现自己想要的功能。(但因为初上手是stm32的我来说,当时直接接触库函数,完全没有理解到本质--也是自己没有好好学QAQ)
需要注意的点就是(1)不能漏了配置(2)一般要通过标志位来判断是否进入中断,不同的芯片不一样。像这次写的比亚迪是自己溢满了会直接进入中断,自己清零。所以我这里就不用读取计时器标志位的数据了。(3)中断函数名称是固定的,一定要引用对应向量号(!!!尽量不要更改启动文件下的命名)我这次就是傻傻的自己写了个函数名,把函数直接在main的while(1)里面循环结果用示波器看的波形时间总是不准。
3、搞清楚了指令周期和定时器周期的关系。
eg定时器分频1:8分频,指令周期1us,即是一个定时器记一次数,要8us
4、初始化之后一般延时500ms,让定时器稳定。最后放一个main的框架留作纪念吧。