STopen硬件设计1-如何分配STM32F103的IO
在开始设计软件功能之前,我们需要先规划好硬件架构,完成需要的功能设计,同时给软件开发提供一个调试环境和对象,验证软件设计的功能是否满足需求,运行是否正确,是否符合我们的预期结果。
万丈高楼平地起,设计一个完整的硬件系统,一般要经过以下几个步骤:
- 第一步就是要列出需要的软件功能模块
- 然后根据功能来分配硬件的IO连接
- 完成外围模块的电路设计
- 最后进行PCB设计。
在STopen开源平台上,我们计划提供如下功能:
- 系统时钟:高速时钟8Mhz,低速时钟32KHz。
- 电池备份,断电保持RTC时钟运行
- JTAG
- 4线SDIO 的SD卡
- MCU接口的16bits TFT LCD屏
- SPI存储器
- 一个调试UART,一个输出UART
- 一个CAN
- 一路I2C
- 一个FULL speed USB device
- 五路PWM
- 2路ADC
- 2路DAC
- 2路PWM捕获
- 6个按键
- 8路输入IO
- 8路输出IO
面对如此众多的功能和IO需要分配,如果采用传统的方法来设计,是非常劳心劳力的,而且很容易出错,估计大家一开始看到都脑瓜子疼。
非常高兴的是ST公司提供了一个设计工具stm32cubemx来辅助我们进行设计工作,这可以大大的减少我们的设计工作量,同时不会发生错误。该软件的使用操作请参考其他相关文档,在此不具体讲解。
工具是帮助我们提高设计效率和避免错误的,并不能代替我们的工作,所以在使用这个工具的时候,我们如何来安排计划的功能所对应的IO引脚,也需要一些设计技巧。
我们首先要明白和理解一个重要的功能,ST芯片的IO绝大多数是可以进行重映射的,比如一个UART1它的管脚是可以变化的,并不是固定不变的。这一点和传统MCU的是有巨大区别的,好处是我们更容易根据布线的方便调整位置,同时提高IO的利用率,最大化的使用这些IO来达成我们的目标。但是也有一些引脚是不可以重映射的,比如JTAG,USB,OSC等。
在设计一个系统之前,我们要先大概了解一下这个芯片的哪些IO资源可以重映射,哪些是固定的,这样我们设计的时候就可以按照先不变,再可变的顺序来合理安排IO。
一般来说,芯片的UART,I2C,SPI,PWM,ADC,DAC等这些常规资源的IO都是可以重新映射,或者有多个选择,当和其他IO发生冲突的时候,我们可以几选一的方式来避开冲突,比如它有好几个spi输出,我们只需要其中一个,那么就可以根据IO的使用和冲突情况来选择任意一路就可以满足我们的需求。
根据经验和这些特征,我们IO分配的先后顺序如下,能事半功倍:
- 先安排具有唯一性的资源(如OSC,BATbackup,USB,SD卡,LCD,JTAG),因为你没得选。
- 再安排选择性比较小的资源,比如UART,SPI,I2C等
- 然后安排可以多选一的资源,比如ADC,DAC,PWM等
- 最后安排一般IO。
在分配2-4类型的可变IO资源的时候,要考虑你的PCB布局,以后PCB设计从那一边出线,对应的功能引脚就安排到那一边,以就近,顺序的原则安排IO,方便和简化PCB设计,同时能提供好的设计信号回路,保证系统稳定性。
在后期实际PCB设计过程中,我们根据走线的难易程度可以再次局部调整和重新分配信号IO,来达到最优的PCB布局和设计。
下图是我们根据以上原则完成的IO分配设计图:
下一章预告:原理图设计第一步,如何设计一个最小系统?
原创文章,欢迎转载,请注明来源,未经书面允许,请勿用于商业用途。