isp demo里用的UART1,功能脚配的P3.0,P3.1。我配成P1.6,P1.7也可以下载AP代码升级。但是配置UART2,而 ...
用户自定义方式使用IAP下载
改成UART2,先使用用户程序调通UART2再加入下载功能
检查UART2配置,UART模式、波特率发生器,中断设置、中断函数等
代码看着没啥问题呀
本帖最后由 silhouette 于 2024-7-27 14:40 编辑代码看着没啥问题呀 救救孩子吧{:sad:}
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:00
P_SW2|=0x01; //设置UART2端口为UART2_2
AUXR=0x15; //设置定时器0为12T模式,设置定时器1为12 ...
正常工作的代码UART2部分,对比一下少了什么操作没有
串口收发程序参考
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=4598 中断向量没重映射吧?
串口1的中断向量重映射官方自然已经给弄好了,就在那个isr.asm文件里,如果想用串口2了话就得自己再把串口2中断映射一下。
不然bootload里用不了中断 楼主 问题搞定没?我也是尝试用串口2 就是不能成功。 附件是使用串口3进行在线升级的用户ISP例子,可以参考一下。
修改接口就以下几个位置:
1.主文件 main.c 里面串口IO模式设置:
2.串口文件 uart.c 串口初始化函数:
串口接收函数:
串口发送函数:
就这些。
stc8a8k64d4通过串口2进行iap搞定了,除了要先配置P10 P11我双向口,其次配置串口的时候要把发送中断标志位置1, 官方例程是 SCON = 0x52;配置串口2时需要为S2CON = 0x12;具体为什么么我也不知道;其他地方都是正常配置和替换。