嵌入式软件开发 基础问题(1)
1.在内部可以确定上下拉,为什么需要外部上/下拉?
因为在上电的过程中,我们无法确定芯片引脚的电平。GD32的芯片在默认是浮空输入。这时候体现为高电平和低电平都是合理的。只有芯片工作起来之后配置了GPIO,才算正式的接管GPIO。这正在自己制作的小作品中可以忽视。但是在实际的产品中,可能一个电平出现了微妙级别的误触发,就可能导致仪器炸毁。
以GD32为例,我们实测在Reset信号过来之后,需要140ms左右芯片才运行到主函数。但是从晶振起振到主函数运行只有1ms。除了使用外围电路来确定GPIO的电平状态,这140ms都将处于不可控的状态。
2.为什么有了标准库,还要用寄存器配置?
寄存器直接配置比使用标准库快很多。而且配置GPIO的过程中,可能导致短时间的异常电平。比如说GPIO的配置可能会产生1us异常下拉。但是使用寄存器,这个异常时间就被压到了60ns。我这里找到一个测试IO输出的博文,可以充分的展现出标准库和寄存器之间的差距
https://news.eeany.cn/application/352910-59.html
3.为什么同源重要的中断,和不重要的中断不能使用同源中断。
比如说硬件过流的中断,和编码器的中断使用了同一个中断源Line10_15。虽然在中断函数中可以判断具体是哪个线。但是这判断不是百分百可靠的。不要相信芯片总是按照理想的情况下工作。
4.我遇到的一些奇怪的现象。
1.GD32并口通信过长导致ADC自动被关掉。这是大佬们解决问题时发现的问题。
2.SPI通信DMA数据错开了一个字节。不使用DMA的时候,用while函数等待收发的标志时。数据位置正常。但是使用DMA进行收发。原先第二个数据跑到了第三个数据的位置。最后解决现象的方法时将SPI的频率拉高。由原先的128分频,修改到了32分频及以下的频率。DMA数据都是正确的。最终将频率定在了8分配。最终认为是时序原因,但是没有具体测信号验证。

