STM32确实好东西
本帖最后由 iffi123 于 2020-2-28 00:13 编辑功能强大, 因为以前玩单片机是很早的时候,那时只有intel原产的51,和pic, 功能单一。
这次接触STM32, 感觉架构还是很不错,学起来很顺手,没有别扭的感觉,这大概就是设计好的特点吧,功能挺全的,各种中断, DMA什么的,片上外设多, 较自由,发挥空间大
这几天玩的片上ADC和DMA,转换完直接传到内存,都不用操心,很好,试验了5000个ADC值, 一次性DMA到数组里,占用10k的内存空间,CBT6才20k啊,哈, 另外ADC内置温度传感器和基准电压,再加个线连到电源,单一个最小系统就可以玩多通道采集
还有定时器,功能也很强大, 但也比较复杂,寄存器配置很多, 逻辑关系要理顺,不然会晕乎,核心计数器支持内外时钟,还支持多样的输入触发和输出信号, 再加上扩展的输入捕捕获和输出比较模块, 可以把定时器, ADC, DMA, 中断搭积木般的组合:lol
因为想多了解一些底层的工作机制,最近用的比较多寄存器操作,库函数是辅助,主要了解库函数实现的功能是通过设置哪些寄存器哪些位实现的,一般折腾完寄存器,我会重写一个库函数版本备用。
不知道现在的51系发展到什么程度,还有pic的8脚甚至6脚的超小cpu也是非常有吸引力的,等我stm32学有所成,再了解了解 我觉得用库函数是有好处的,一个重要原因是,底层的东西复杂了,或者,很难掌控,或者,底层变化很快。有了库函数,就是对底层的封装,就可以从指令集脱离出来了,把经历用在算法上了。应该对使用者简单了。现在windows下编程,不也是用库吗?
win32 api。函数调用的方法;又不过瘾,搞出个.net,封装成了对象调用。结果搞的浮肿了,如果不是有自动完成关键字功能,估计,都成了打字高手了。:lol 本帖最后由 iffi123 于 2020-2-28 13:53 编辑
amo 发表于 2020-2-28 12:24
有库就别折腾寄存器了
库本身就是人家几十人团队折腾N年才完善到这个程度的,先建模,然后用各种脚本批量 ...
你看完库的源码就知道,库并没那么神奇,但更方便,如果开发大的项目用库减少出错几率,排查也更容易,个人玩的就无所谓
另外有些功能库里没有单独提供,比如定时的输入捕获, 如果你想在初始化后,改变极性(上/下升沿), 库里没有单独这个功能的函数,你只能重新初始化一遍,显得非常没有必要,寄存器的话,修改一个标志位就搞定,实际编程,我两个混合使用,并非排斥库,只是学习阶段倾向于寄存器
楼主的确是这方面的·发烧友呀!:) STM32初学最难的地方就是如何正确配置基础,搭建合理的平台 STM32确实好,价格便宜指标高 w8899 发表于 2020-2-28 08:18
单片机好上手吗?它能不能代替PLC?与PLC相比较有什么优缺点?
好像PLC,就是单片机+输入输出扩展电路+接口做的吧 w8899 发表于 2020-2-28 08:18
单片机好上手吗?它能不能代替PLC?与PLC相比较有什么优缺点?
单片机入门门槛不高 之前用了多年stm32,后来工作需要用Linux, qt, 现在又要学安卓了。 有库就别折腾寄存器了
库本身就是人家几十人团队折腾N年才完善到这个程度的,先建模,然后用各种脚本批量生成这么命名规范逻辑严谨的库。个人去搞,绝无可能做得出。 iffi123 发表于 2020-2-28 13:25
你看完库的源码就知道,库并没那么神奇,但更方便,如果开发大的项目用库减少出错几率,排查也更容易, ...
你如果认为“库没那么神奇”,说明你做过的项目太少,或者做过的基本都是同一类型略作修改。
不用写一个完整的库,只要在现有库基础上,参考其规范加入你所说的几个新功能,要求能无缝整合一起,别人不需要看手册就能直接用你的API……然后你就知道ST的库到底牛在哪里了
库本身就隐含了统计、建模、抽象,如果需求非常冷门,当然没必要为其独立出个API。如果什么都塞进去,这样的库就跟没有一样,还不如直接读写寄存器。以你提到的捕获为例,不少应用都会要求先捕获一次,判断范围,再修改参数逼近,获得最佳的精度;还有的需要根据捕获结果散转,如果能提供钩子岂不是效率更高?——但这些需求,用一个“APP”来做更合适,没必要都凑到一起。 amo 发表于 2020-2-28 15:37
你如果认为“库没那么神奇”,说明你做过的项目太少,或者做过的基本都是同一类型略作修改。
不用写一个 ...
初始化后根据情况修改某些参数,比如极性,是非常正常的操作,没什么大惊小怪的,库本应该让人更方便使用,而不是限制使用
库实现的效果其实是傻瓜式操作,越傻瓜越不容易出错,但世上没有把所有好处全占上了的,库有这些好处,必然也要付出其它的代价,比如臃肿,不信你可以看下最最常用GPIO_Init源码, 搞了一堆,if else语句一层层套,编译出来接近90-100个字节,实际上如果用寄存器,一条语句几个字节就搞定了(其实就是设置CRL或者CRH的其中4个位), 我举这个例子为了说明库为了保证傻瓜式的操作而付出的代价。
库有好处,但没必要神化,至于库对你的重要性,要看你的项目类型,前面我也说过,如果是比较大的项目,纯库操作也可以理解, 具体到个人diy,就没必要强求,怎么方便怎么来,基本不可能有其它人来维护自己的代码, 做好注释,日后翻来修改也不难。