学习STM32F407入门后的感受

我之前在了解OpenCL的时候,看过一本书里面介绍了通用处理器和专用处理器的区别,以及为什么CPU会发展到多核心。这些知识在我学习STM32开发的时候呼应上了。那本书上写道,CPU分为专用和通用的。我的理解是比如路由器中的CPU只需要数据交换,就属于专用的CPU。而我们平时家用的英特尔和AMD的CPU属于通用处理器。使用通用CPU来处理数据交换,当然是可以使用的。只不过有些电路一定使用不到。这些电路白白花钱,浪费增加成本了。因为路由器只是交换数据不用做其他用途。所以,专门的用途要使用专门的的处理器。那么,不知道读者你,还有没有这样的疑问?为什么CPU要分出许多核心,难道不能做出一个很强的单核心CPU吗?那本书中也给出了回答。一个处理器核心越强大,所需要的集成电路的回路就越多。这样一来成本会很高,设计的难度会加大。要求相同的算力不如使用多核心来的划算。同样的道理,在我高中学习生物的时候教科书上介绍到,为什么细胞的体积不会很大。因为随着细胞的体积变大,细胞的表面积也会变大。这样会造成与细胞外水交换速率就会下降。还有相似的理论,为什么大象不能跳高。

STM32上的CPU就属于专门的CPU,而笔记本电脑上的CPU则属于通用CPU。我在学习串口通信,当中奇偶校验,十分的疑惑。仅仅在寄存器中设置了奇校验还是偶校验,可是没有统计要发送的数据一个字节当中一的个数到底是奇数个还是偶数个。因为我考过c语言二级,我觉得每次发送数据之前应该进行一次统计的。可是我发现库函数中并没有对其进行统计。


image.png

我同时联想到了,为什么有些GPIO口支持串口通信有些不支持,不都是对外输出高低电平嘛!除了有接收时候的寄存器还有些什么不同呢?
我理解的答案是,发送每一帧的数据中,一的个数到底是奇数个还是偶数个,是由硬件电路进行计算的,而不是通过c语言代码进行统计到底是奇数个还是偶数个。这也就解释了,为什么有些GPIO能支持串口通信而有些不能支持。因为硬件设计就是为了串口通信而生的。继续验证我的理论,可以参考一下Windows串口软件是怎么样开发的?有没有统计数据位当中一个数到底奇数个还是偶数个。

这也就解释了,为什么汽车仪表的板子上要有一个SOC和一个MCU。MCU主要处理CAN信号,SOC上运行QNX,再运行kanzi。因为MCU的专有处理CAN信号能力够强。

我对于systik定时器和通用定时器的理解是,通用定时器主要是应用在外设上面,systik主要用在内核中,CPU会停止运行。在输出PWM波的时候,使用到了通用定时器。那么,在配置GPIO的输出的时候会配置一个速率,那个速率又是做什么用的呢?
image.png

这里配置的速度100M是什么意思呢?是GPIO时钟的速率吗?时钟的变化不是也是方波吗?为什么不能直接修改这里的速率来发出PWM波?

嵌入式开发真正做到了如何节省能源,外设和内核都不使用同一套时钟。目前对于嵌入式开发能看懂大致原理了,对于具体操作还不是太熟。

你可能感兴趣的:(学习STM32F407入门后的感受)