一定要注意交叉开关问题:外设要想正确分配到指定引脚,一定要用配置工具确定分配到指定引脚;如果手动分配一定要仔细验证。这方面有个深刻的教训。
有个项目用c8051f020,用到2个串口,硬件已经确定好了,我主要负责软件,要想让UART0/1分别分配到指定的(P0.0~p0.1)/(P0.4~p0.5),根据配置工具测试发现必须配置串口0、SMBUS 、串口1而SPI0禁用。但SMBUS板子上引出暂未使用,所以当时采用手动配置交叉开关,模块一个一个调试,所以就没有使能smbus,这就造成了后面的串口1无论如何都用不起来,同样的2个串口(TTI-微型打印机;TTL-CP2102,波特率也相同,都可以用串口1做公用的波特率发生器)。后来仔细检查各项配置,才发现这个隐藏很深的低级疏漏,耽误了一天半时间。
附注串口的配置:
1 除了对应的交叉开关使能,其它前面的外设交叉开关也要正确使能;
2 TX设置成推挽输出。
3选择串口的工作模式,波特率的产生方式(串口1可用定时器1(默认)/定时器2;串口2可用定时器1(默认)/定时器4作为波特率发生器,即定时器1可以作为串口1和串口2的公用波特率发生器)、波特率是否/2。
4 根据波特率和指定的定时器设置定时器的工作方式(一般选择8位自动重装)、时间基准源、初值(高8位由波特率产生,低8位等于高8位)。
5 发送完成标志位置1触发进入手动发送或进入中断。
时间: 2024-11-05 16:06:48