找回密码
 立即注册
查看: 1686|回复: 6

奇了怪了,STC8H使用DMA发送串口数据,TIMER0就乱了。

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-04-23 16:05:29

13

主题

40

回帖

297

积分

中级会员

积分
297
发表于 2023-3-21 15:28:26 | 显示全部楼层 |阅读模式
奇了怪了,stc8H使用DMA发送串口数据,TIMER0就乱了。不用DMA发送,TIMER0中断就好了,能正常定时
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-04-23 16:05:29

13

主题

40

回帖

297

积分

中级会员

积分
297
发表于 2023-3-21 15:33:17 | 显示全部楼层
本帖最后由 zcllom 于 2023-3-21 15:35 编辑

void UART1_DMA_Config(void)
{
        DMA_UR1T_CFG = 0x80;                //bit7 1:Enable Interrupt
        DMA_UR1T_STA = 0x00;
}

void UART1_DMA_Transmit(u8 *pData, u16 Size)
{
    if(Size == 0) return;
    Size -= 1;
        DMA_UR1T_AMT = (u8)Size;        //设置传输总字节数:n+1
        DMA_UR1T_TXA = (u8)pData;
    DMA_UR1T_CR = 0xc0;     //bit7 1:使能 UART4_DMA, bit6 1:开始 UART1_DMA 自动发送
}

void Uart1Init(void)                //9600bps@22.1184MHz                        //调试接口
{
        SCON = 0x50;                //8位数据,可变波特率
        AUXR |= 0x40;                //定时器时钟1T模式
        AUXR &= 0xFE;                //串口1选择定时器1为波特率发生器
        TMOD &= 0x0F;                //设置定时器模式
        TL1 = 0xC0;                //设置定时初始值
        TH1 = 0xFD;                //设置定时初始值
        ET1 = 0;                //禁止定时器%d中断
        TR1 = 1;                //定时器1开始计时
        P_SW1 &= 0x3f;
        P_SW1 |= 0x40;      //UART1 switch to, 0x00: P3.0 P3.1, 0x40: P3.6 P3.7, 0x80: P1.6 P1.7, 0xC0: P4.3 P4.4
        //ES  = 1;        //允许中断                        
        //REN = 1;        //允许接收        
        B_TX1_Busy = 0;
}

void Timer0_init(void)                //1500微秒@22.1184MHz
{
        INTCLKO &= ~0x01;          //不输出时钟
        AUXR |= 0x80;                        //定时器时钟1T模式
        TMOD &= 0xF0;                        //设置定时器模式
        TL0 = 0x66;                                //设置定时初始值
        TH0 = 0x7E;                                //设置定时初始值
        ET0 = 1;                    //允许中断
        TF0 = 0;                                //清除TF0标志
        TR0 = 1;                                //定时器0开始计时
}

点评

下面这句修改一下再看看  详情 回复 发表于 2023-3-21 21:39
  • 打卡等级:偶尔看看I
  • 打卡总天数:12
  • 最近打卡:2025-04-27 09:44:17

25

主题

252

回帖

2089

积分

超级版主

积分
2089
发表于 2023-3-21 15:45:48 | 显示全部楼层
1.png
你好 参考一下范例程序    下载地址:https://www.stcai.com/filedownload/618387
QQ:3398500488
微信号:18106296592(小刘)
  • 打卡等级:偶尔看看III
  • 打卡总天数:38
  • 最近打卡:2025-04-30 14:38:57

25

主题

977

回帖

3599

积分

超级版主

积分
3599
发表于 2023-3-21 21:39:32 | 显示全部楼层
zcl*** 发表于 2023-3-21 15:33
void UART1_DMA_Config(void)
{
        DMA_UR1T_CFG = 0x80;                //bit7 1:Enable Interrupt

下面这句修改一下再看看



1.png

点评

真如你所言,把这个位置一改就好了,真是太感谢了,把我从烦恼中解救出来  发表于 2023-3-22 00:39
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-04-23 16:05:29

13

主题

40

回帖

297

积分

中级会员

积分
297
发表于 2023-3-21 22:00:17 | 显示全部楼层
zh*** 发表于 2023-3-21 21:39
下面这句修改一下再看看

好,我按照这个建议试试
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 22:16 , Processed in 0.132744 second(s), 81 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表