- 打卡等级:以坛为家II
- 打卡总天数:520
- 最近打卡:2025-05-01 08:06:21
论坛元老
- 积分
- 5204
|
本帖最后由 xxkj2010 于 2023-1-14 11:48 编辑
STC提供的范例为我们使用STC单片机提供极大的方便,但在实际应用中,发现注释偏少。
对于初次到手的芯片,在寄存器超多的情况下,对每个寄存器的定义、配置要一个一个地看手册,一个一个地研究,的确很浪费时间,所以大家首选的方法是使用公司提供的范例,然后根据需要再修改范例,以实现自己所需要的功能。
但在使用范例中,发现一个问题,就是注释偏少。对于注释偏少的范例,大佬一般没什么,不觉得看代码很累,但对于我们这些菜鸟来说,的确很辛苦。例如本人前两天使用 STC8H8K64U-DEMO-CODE\61-CDC(Communication Device Class)协议范例,这个范例是将USB配置成虚拟串口,实现PC端向USB-CDC发送数据时,这些数据会转发到串口2,但在实际中P10 P11引脚没有串口输出,结果分析范例,才发现在uart_init()中,串口2的引脚被影射到P46 P47,于是将P_SW2 |= 1;注释掉,随即P11引脚输出了串口数据。幸好 P_SW2 |= 1; 后面有注释 // UART2 switch to: 1: P4.6 P4.7 ,这真的为我们阅读代码提供极大的方便。
但又想将这个范例改成电脑向USB-CDC发送数据,然后单片机又通过USB-CDC虚拟串口向电脑端原数据返回,想看看是哪个函数或哪些语句实现这个功能,在没有注释的情况,仿佛发现有下面这些代码段可以实现数据原路返回:
IE2 &= ~0x80; // EUSB = 0;
UsbInBusy = 1;
usb_write_reg(INDEX, 1);
cnt = 0;
while (TxRptr != TxWptr)
{
usb_write_reg(FIFO1, TxBuffer[TxRptr++]);
cnt++;
if (cnt == EP1IN_SIZE)
break;
}
usb_write_reg(INCSR1, INIPRDY);
IE2 |= 0x80; // EUSB = 1;
各位大佬,以上看法,有不对的请多多指教,谢谢!
|
|