发布网友 发布时间:2022-05-02 18:38
共2个回答
热心网友 时间:2022-06-21 06:32
嘿嘿,那是当然了,STM32是32位单片机,51是8位机,两者不是一个数量级的。51单片机的I/O口就是I/O口,没那么多功能,而STM32呢,它的GPIO口既可以做数字I/O,有些也可以做A/D,D/A,有些可以做SPI或者I2C对外通讯,还有些是做PWM脉宽输出,功能各有不同。这些功能都需要实现配置好才能让单片机知道你打算怎么用这些口。51简单死了,没有A/D,D/A,没有SPI通讯,也没有PWM,就是I/O,每个口也只有那么一个寄存器,直接读写就完了。而到了32位机就不一样了,那么多功能,那么多寄存器,如果不用库的话,就要一位一位地把每个寄存器都设好,非常麻烦。ST专门给STM32编制了一个函数库,所有的函数库设置你只需要调用函数库的函数就好。如果你英语还说得过去的话,看着函数库就可以基本不用去每一位对寄存器了,牺牲了效率,但是非常非常的方便。至于使用起来,也非常简单,比如你要用GPIO,你就把STM32F10X_GPIO.C加到你的工程文件中去,然后在你在程序里引用一下#include "stm32f10x.h",就可以了。当然,我觉得这么做还要一个一个文件地想,到底需要不需要,干脆把所有的C文件都加到工程里去,然后在编译器里打开Level-2优化,这样没有用到的函数都不会被编译到最终的hex文件中去了。想用到什么函数都可以,非常方便的。热心网友 时间:2022-06-21 06:33
应为0x00有类型限定为uinit16_t以为着0x00这个值是16位的,根据静态类型转换规则,PIN在和其进行运算的是时会自动转换为uint16_t,所以这个宏定义实际上未归定PIN的类型,但是规定了PIN在运算时的有效数据位为低16bit