zcllom 发表于 2023-8-13 11:35:56

STC8H4K64TLCD的DMA+UART4功能,通讯波形不正常。(已解决!)

本帖最后由 zcllom 于 2023-8-13 13:16 编辑

STC8H4K64TLCD使用UART4_2的DMA极其不正常,搞了大半天,这么简单的功能居然不正常,气死人。用的是TIM4做波特率(后来改为TIM2一个球样),设置按照STC工具上弄的,用普通UART方式没问题,发送正常,但是改位DMA方式,发送不正常,波形也不对!!不知道怎么回事

用普通UART4方式正常的波形





让DMA代理发送的错误波形




zcllom 发表于 2023-8-13 11:45:12

本帖最后由 zcllom 于 2023-8-13 11:50 编辑

已经越来越多地使用STC芯片了,以前做的一块板子,用的是STC8H8K64U,使用DMA+UART1方式,非常好用。这次做的板子用DMA+UART4出现这种状况,始料不及。那为什么不直接用单独UART方式?因为不能,单片机要控制一长条的级联的幻彩LED,对LED灯组发数据时,一丁点中断都不能产生,甚至用数组循环寻址方式都不行,必须用指针移位来取LED的颜色灰度数据往单总线上发bit数据(21颗幻彩LED,每一颗有红、绿、蓝三个字节寄存器,也就是一次性按照严格的时序发完21x3x8=504bit位数据)。所以DMA功能处理串口收发是刚需!

zcllom 发表于 2023-8-13 13:19:57

本帖最后由 zcllom 于 2023-8-13 13:33 编辑

好用!好用!真好用!就是经常在相关设置上会有些小的细节变更,或者说同系列不同型号是否存在一定的设置差异?不得而知!
就比如这次:

前段时间用STC8H8K64U芯片,
设置串口发送DMA:
DMA_UR4T_TXA = (u8)pData;
会出错!
改成以下:
DMA_UR4T_TXA = (u16)pData;                        //只有强制转换(u16),才能避免异常 20230403
好了

这次用的是STC8H4K64TLCD(带触摸键,带LCD驱动很香),沿用之前的设置,结果就坏了
改成:
DMA_UR4T_TXAH = (u8)((u16)pData >> 8);
DMA_UR4T_TXAL = (u8)((u16)pData);
就解决问题了。
页: [1]
查看完整版本: STC8H4K64TLCD的DMA+UART4功能,通讯波形不正常。(已解决!)