查看原文
其他

一个因为管脚冲突导致以太网异常的话题

茶话MCU 2022-09-11


有人使用STM32F107芯片做以太网应用,基于ST官方的参考例程着手开发。刚开始只是使用LWIP例程做TCP通信,网络通信都正常。等添加ADC功能及DMA传输后,以太网不通了,ping也ping不通。


开发者使用TIMER1定时触发ADC采样,采样完成后触发DMA传输,并开启了DMA传输完成中断。程序里还使用了TIMER1 通道1的PWM输出,并将捕捉事件作为ADC采样的外部触发信号。


那就往回扒皮验证,取消定时器触发及DMA功能,仅使用ADC功能,以太网络通信正常。再通过屏蔽DMA功能或定时器功能来回验证,发现问题好像出在定时器那里。因为只要开启定时器相关功能,且不开中断,即使关闭了ADC及DMA的情况下还是有问题。

最后发现是TIM1的通道1的PWM输出脚与MCO时钟输出功能脚【PA8】冲突了。因为他同时用MCO【PA8】输出50MHz时钟给以太网的PHY。



当他把TIMER1的通道1换成TIM4的通道4的捕捉事件后一切正常。


这里他是使用ST官方的标准固件库开发的,如果他开发前针对硬件的配置使用ST官方的图形化配置工具STM32CUBEMX配置下,就很容易发现这个冲突问题。


另外,他只是利用TIM1通道1的比较捕捉事件来触发ADC,并不需要对外输出脉冲。那么就可以不用配置为PWM输出,只需将TIM1 CH1配置无输出的OC通道,而又不影响CC事件的产生。这时也不会产生管脚冲突。


STM32芯片的管脚和时钟配置比较复杂,ST官方推出了图形化配置神器---STM32cubeMx,对于管脚和时钟配置非常方便,值得使用。没有的话,你可以去 搜索下载。安装、使用也简单,ST官方有相关使用的视频。需要的话,可点击下方“原文阅读”查找。


==================

往期话题链接:

1、聊聊ST MCU定时触发ADC的话题

2、话说STM32的PCROP代码保护功能

3、一个关于STM32定时器的CCR清零话题

4、一个跟STM32中断优先级有关的话题

5、STM32的几个电源相关问题的案例分享


扫描或长按二维码可关注公众号



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存