DebugLab 发表于 2024-7-27 14:37:20

silhouette 发表于 2024-7-27 14:26
isp demo里用的UART1,功能脚配的P3.0,P3.1。我配成P1.6,P1.7也可以下载AP代码升级。但是配置UART2,而 ...

用户自定义方式使用IAP下载
改成UART2,先使用用户程序调通UART2再加入下载功能
检查UART2配置,UART模式、波特率发生器,中断设置、中断函数等

silhouette 发表于 2024-7-27 14:39:54

代码看着没啥问题呀

本帖最后由 silhouette 于 2024-7-27 14:40 编辑

代码看着没啥问题呀

silhouette 发表于 2024-7-27 14:59:30

救救孩子吧{:sad:}

DebugLab 发表于 2024-7-27 15:00:59


        P_SW2|=0x01;                                        //设置UART2端口为UART2_2
        AUXR=0x15;                                                //设置定时器0为12T模式,设置定时器1为12T模式,使能定时器2,设置定时器2为1T模式
        TMOD=0x00;                                                //设置定时器0为16位自动重载模式,设置定时器1为16位自动重载模式
        TL0=0x00;                                                //设置定时器0初值(5ms)
        TH0=0xDC;                                                //设置定时器0初值(5ms)
        ET0=1;                                                        //使能定时器0中断
       
        SCON=0x50;                                                //UART1模式为8位数据,可变波特率
        S2CON=S2REN;                                        //UART2模式为8位数据,可变波特率
        T2L=BRT;                                                //设置波特率
        T2H=BRT>>8;                                                //设置波特率
        ES=1;                                                        //使能UART1中断
        IE2|=ES2;                                                //使能UART2中断


void Uart2_Isr(void) interrupt 8
{
        static unsigned char tp;
        unsigned int temp;
        if(S2CON&S2RI)
        {
                S2CON&=~S2RI;
                Uart2_R_Buffer=S2BUF;
                Uart2_RP++;
                               

        }
        if(S2CON&S2TI)
        {
                S2CON&=~S2TI;
                if(tp==Uart2_T_Lenth)
                {
                        tp=0;
                        Uart2_T_Lenth=0;
                }
                if(Uart2_T_Lenth!=0)
                {
                        S2BUF=Uart2_T_Buffer;
                        tp++;
                }
        }
}

DebugLab 发表于 2024-7-27 15:03:36

DebugLab 发表于 2024-7-27 15:00
P_SW2|=0x01;                                        //设置UART2端口为UART2_2
        AUXR=0x15;                                                //设置定时器0为12T模式,设置定时器1为12 ...

正常工作的代码UART2部分,对比一下少了什么操作没有

DebugLab 发表于 2024-7-27 15:06:41


串口收发程序参考
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=4598

_NCY_ 发表于 2024-7-31 12:02:41

中断向量没重映射吧?
串口1的中断向量重映射官方自然已经给弄好了,就在那个isr.asm文件里,如果想用串口2了话就得自己再把串口2中断映射一下。
不然bootload里用不了中断

sunshine.li 发表于 2024-10-29 21:21:49

楼主 问题搞定没?我也是尝试用串口2 就是不能成功。

乘风飞扬 发表于 2024-10-30 14:57:07

附件是使用串口3进行在线升级的用户ISP例子,可以参考一下。
修改接口就以下几个位置:
1.主文件 main.c 里面串口IO模式设置:

2.串口文件 uart.c 串口初始化函数:

串口接收函数:

串口发送函数:


就这些。

sunshine.li 发表于 2024-10-30 16:50:28

stc8a8k64d4通过串口2进行iap搞定了,除了要先配置P10 P11我双向口,其次配置串口的时候要把发送中断标志位置1, 官方例程是 SCON = 0x52;配置串口2时需要为S2CON = 0x12;具体为什么么我也不知道;其他地方都是正常配置和替换。
页: 1 [2] 3
查看完整版本: isp程序里接收ap固件的串口只能使用UART1吗