AI8H8K64U,D版本串口问题
本帖最后由 DebugLab 于 2024-11-19 09:46 编辑AI8H8K64U,D版本,UART1 的TX RX接一起,用9bit 单线通信,在中断中 TX发送完成后马上开启接收,这时候收到的数据是正常的,但 UART2,异常,会触发一次接收中断,这时候取S2BUF是旧数据。问:这2个串口底层工作是不是不一样,uart3 uart4是否也存在相同问题。
3B 。。。。。2C 是从机发送的数据,stc收后发送一条数据后启动接收,会触发一次接收中断(100%触发,不知道怎么跟踪间隔多久等),uart1 就不会。 是不是 Tx -> Rx 要保护时间?
是不是中断优先级的原因 DebugLab 发表于 2024-11-19 09:47
是不是中断优先级的原因
中断优先级已经配置了
用下面的程序测试下
https://www.stcaimcu.com/forum.php?mod=redirect&goto=findpost&ptid=375&pid=2070
神农鼎 发表于 2024-11-19 10:32
用下面的程序测试下
串口2,3,4都会有这个现象,做PSAM卡方案,需要多路通讯
将收发接在一起,发送时也接收到自己发的,转接收时,清除RI标志试试。 梁工 发表于 2024-11-19 15:05
将收发接在一起,发送时也接收到自己发的,转接收时,清除RI标志试试。
//S4BUF = SCON; //test: UART 1/2/3 ISR 只能开启一个, 观察 2路示波器 (UART4 和 UART 1/2/3),3个中断分别开启这个,观察示波器.
麻烦大佬看下是什么问题,项目调通一路准备收尾了,结果卡住了
匿0名 发表于 2024-11-20 09:30
//S4BUF = SCON; //test: UART 1/2/3 ISR 只能开启一个, 观察 2路示波器 (UART4 和 UART 1/2/3),3个中 ...
代码只要修改以下部分
然后此代码抓到的波形如下图
本帖最后由 梁工 于 2024-11-20 15:42 编辑
匿0名 发表于 2024-11-20 11:29
代码只要修改以下部分
请先别修改程序, 直接下载"02A-串口2中断收发(收发并联单线通讯)"里的"UART2.hex"测试, 主频选择11.0592MHZ. 测试正常后再修改移植.
串口2半双工单线(也就是将TXD2、RXD2接在一起)中断方式收发通讯程序。
通过PC向MCU发送数据, MCU收到后通过串口把收到的数据原样返回.
空闲时串口处于接收模式,发送时先禁止接收,发送中断里重新允许接收。
由于接收完成中断时刻比发送完成中断时刻晚一个波特的时间(比如比特率57600对应一个波特时间就是17.36us),所以发送中断要延时一个波特时间再允许接收,如果发送中断里马上允许接收,将会触发一次接收中断。
本例每隔500ms主动发送一个字符'A',收到上位机的数据会原样返回。
默认参数:
串口2设置均为 1位起始位, 8位数据位, 1位停止位, 无校验.
串口2(P1.0 P1.1):57600bps.
==============================================
梁工 发表于 2024-11-19 15:05
将收发接在一起,发送时也接收到自己发的,转接收时,清除RI标志试试。
又尝试抓了下UART2第一次中断后而外进入中断的时间间隔, 感觉和波特率存在关系。方法是在UART2中断中对P35取反,在PWM中断中做P34置0置1。
以下两张分别是21.5K波特率和500k波特率再次触发串口中断的
21.5K波特率
500k波特率
看波形可以知道波特率设置越大马上再次触发串口中断的时间就越快,但不管怎么样都不应该马上再次触发串口中断才对。手头只有STCH8H8K64UD版本的,不知道其他版本会不会也是这样
页:
[1]
2