STM8S003单片机串口接收与ADC设置冲突

2019-04-15 14:57发布

最近在搞STM8S单片机,怎么说,真的有一种相见恨晚的感觉,以前用过51、AVR、飞思卡尔、PIC,觉得跟它比都不人性化,外围简简单单,支持3.3v和5v,有很多人用的库,但是我觉得用它就是看它的性价比,本来没多少的容量,我就直接操作寄存器,而且它跟STM32不一样,STM32内部寄存器很多,而且速度快,容量大,更本不用考虑库函数那点损失,哎,以前一直很抵触,没想到,真的很好用,回想一下以前有很多项目根本不需要STM32,一个STM8搞定,性价比超高,而且我觉得入门很容易。 不罗嗦了,说一下问题,最近做磁悬浮,用到串口中断接收修改PID参数,同时,磁悬浮用到了内部ADC,SO,问题来了,设置好ADC和UART,串口怎么都不进中断,想一想之前我单独测试过串口,收发都没问题,那是怎么回事,花了一晚上找了一下资料,原来STM8单片机在做输入使用的时候为了使数字信号稳定加了一级施密特触发器,看下面:
就是红圈那里,我初始化ADC的时候把所有ADC输入通道的施密特触发器关掉了,ST工程师本意是为了节省电流,就是降低功耗,但是我没有注意到ADC的通道6跟UART的RX引脚是复用的,阻止了数字信号的接收,看这里:

所以在设置ADC的时候只要把这个通道的施密特触发器打开就好了,用这句: ADC_TDRL = ~0x40; //使能AIN6施密特触发,该引脚用作串口接收