dongchengya
发表于 2024-3-7 20:49:58
必须在上微机打开串口才能正常输出,关闭上位机串口软件后,stc单片机其他线程收到影响,立即停止工作
dongchengya
发表于 2024-3-7 20:57:34
请今日参与验证的大佬。按照上述描述,在指定位置增加
printf("问题就在这一行,增加这一行就无法正常运行");
目的是让cdc串口,持续输出一串字符,
观察上位机串口软件开启与关闭时,
led灯线程,是否还能正常工作?
我看到上述实验没有影响,可能是我没有说清楚,
需要在指定位置加上一句printf 函数,以使cdc串口能主动的持续的发出一串字符
dongchengya
发表于 2024-3-8 08:44:28
gentleman 发表于 2024-3-7 14:58
写了个闪灯任务
与USB任务 互不影响
早上好,在线等 。。
55337575
发表于 2024-3-8 09:18:35
本帖最后由 55337575 于 2024-3-8 09:20 编辑
dongchengya 发表于 2024-3-8 08:44
早上好,在线等 。。
我自己修改了一下例子的程序,你参考一下
#include "stc.h"
#include "usb.h"
#include "usb_req_class.h"
//USN数据发送进程
void USB_SendData(BYTE *buf,u16 bl)
{
BYTE num;
while(bl)
{
num=(bl>(EP1IN_SIZE-1)?EP1IN_SIZE:bl);
bl-=num;
while(num)
{
if(UsbInBusy) continue;
TxBuffer = *buf++;
num--;
}
}
}
//USB口收发监视进程。发送通过USB_SendData()函数填充缓冲区;
//接收数据自动完成,数据填充到USB_RevDataBuf[]缓冲区,
//数据长度为USB_RevDataLong,该参数在数据处理完成后由软件清零
void USB_polling()
{
BYTE cnt;
if (DeviceState != DEVSTATE_CONFIGURED)
return;
if (!UsbInBusy && (TxRptr != TxWptr))
{
EUSB = 0;
UsbInBusy = 1;
usb_write_reg(INDEX, 1);
cnt = 0;
while (TxRptr != TxWptr)
{
usb_write_reg(FIFO1, TxBuffer);
cnt++;
if (cnt == EP1IN_SIZE) break;
}
usb_write_reg(INCSR1, INIPRDY);
EUSB = 1;
}
while(RxRptr != RxWptr)
{
USB_RevDataBuf = RxBuffer;
}
if (UsbOutBusy)
{
EUSB = 0;
if (RxWptr - RxRptr < 256 - EP1OUT_SIZE)
{
UsbOutBusy = 0;
usb_write_reg(INDEX, 1);
usb_write_reg(OUTCSR1, 0);
}
EUSB = 1;
}
}
接收监视一直循环,发送随机
void main()
{
WTST = 0;//设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
EAXFR = 1; //扩展寄存器(XFR)访问使能
CKCON = 0; //提高访问XRAM速度
usb_init();
EA = 1;
while (1)
{
USB_polling();
USB_SendData("1234567890",10);
Delay1000ms();
USB_SendData(USB_RevDataBuf,USB_RevDataLong);
USB_RevDataLong=0;
}
}
dongchengya
发表于 2024-3-8 09:40:27
55337575 发表于 2024-3-8 09:18
我自己修改了一下例子的程序,你参考一下
#include "stc.h"
我看看,谢
dongchengya
发表于 2024-3-8 09:50:45
55337575 发表于 2024-3-8 09:18
我自己修改了一下例子的程序,你参考一下
#include "stc.h"
从长远的角度讲,是不是这个 USB-CDC 库 需要改进一下?
55337575
发表于 2024-3-8 10:02:53
本帖最后由 55337575 于 2024-3-8 10:07 编辑
dongchengya 发表于 2024-3-8 09:50
从长远的角度讲,是不是这个 USB-CDC 库 需要改进一下?
个人感觉不需要,CDC本身是服务于串口的,所以同串口关联是应该的。我只是需要直接通过串口收发数据所以改了一下。去除了所有串口关联子程,这样我可以嵌套到程序中了。而且这个过程同波特率无关。
dongchengya
发表于 2024-3-8 10:08:56
本帖最后由 dongchengya 于 2024-3-8 10:20 编辑
stc_usb_cdc_32.LIB这个新的USB-CDC库是 官方提供的新版本 USB库文件,下载地址为:https://www.stcai.com/khs
stc_usb_cdc_32g.LIB这个早一点的USB-CDC库是在 FreeRTOS-USB-CDC 中提供的,下载地址为: https://www.stcai.com/xtrj
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
现在需要在 FreeRTOS-库函数版本 中使用 USB-CDC 库文件, 如果使用FreeRTOS-USB-CDC 中提供的stc_usb_cdc_32g.LIB 这个库文件 就会出现问题,具体如下:
stc_usb_cdc_32g.LIB 在使用的时候会出现上述 LED灯线程不工作的情况 ,尝试使用新一点的stc_usb_cdc_32.LIB ,
但是编译无法通过,提示如下:
linking...
*** ERROR L127: UNRESOLVED EXTERNAL SYMBOL
SYMBOL:usb_OUT_done?_
MODULE:.\Objects\usb_cdc.obj (usb_cdc)
*** ERROR L127: UNRESOLVED EXTERNAL SYMBOL
SYMBOL:USB_SendData?_
MODULE:.\Objects\usb_cdc.obj (usb_cdc)
*** ERROR L127: UNRESOLVED EXTERNAL SYMBOL
SYMBOL:usb_init?_
MODULE:.\Objects\usb_cdc.obj (usb_cdc)
*** ERROR L128: REFERENCE MADE TO UNRESOLVED EXTERNAL
SYMBOL:usb_init?_
MODULE:.\Objects\usb_cdc.obj (usb_cdc)
ADDRESS: FF54C2H
*** ERROR L128: REFERENCE MADE TO UNRESOLVED EXTERNAL
SYMBOL:USB_SendData?_
MODULE:.\Objects\usb_cdc.obj (usb_cdc)
ADDRESS: FF54FDH
*** ERROR L128: REFERENCE MADE TO UNRESOLVED EXTERNAL
SYMBOL:usb_OUT_done?_
MODULE:.\Objects\usb_cdc.obj (usb_cdc)
ADDRESS: FF5510H
*** ERROR L128: REFERENCE MADE TO UNRESOLVED EXTERNAL
SYMBOL:USB_SendData?_
MODULE:.\Objects\usb_cdc.obj (usb_cdc)
ADDRESS: FF432AH
*** ERROR L128: REFERENCE MADE TO UNRESOLVED EXTERNAL
SYMBOL:USB_SendData?_
MODULE:.\Objects\usb_cdc.obj (usb_cdc)
ADDRESS: FF4369H
*** ERROR L128: REFERENCE MADE TO UNRESOLVED EXTERNAL
SYMBOL:USB_SendData?_
MODULE:.\Objects\usb_cdc.obj (usb_cdc)
ADDRESS: FF43CEH
*** ERROR L128: REFERENCE MADE TO UNRESOLVED EXTERNAL
SYMBOL:USB_SendData?_
MODULE:.\Objects\usb_cdc.obj (usb_cdc)
ADDRESS: FF440BH
dongchengya
发表于 2024-3-8 10:27:55
本帖最后由 dongchengya 于 2024-3-8 10:33 编辑
55337575 发表于 2024-3-8 10:02
个人感觉不需要,CDC本身是服务于串口的,所以同串口关联是应该的。我只是需要直接通过串口收发数据所以改 ...
这里有两个USB库,
旧一点的这个可以在 FressRTOS 中使用,但是会对其他线程有影响,
新一点的这个USB库 ,又不能在FreeRTOS编译通过,
感觉就是 新库和 FreeRTOS 不兼容 。
何故?何解?
dongchengya
发表于 2024-3-8 10:50:42
55337575 发表于 2024-3-8 09:18
我自己修改了一下例子的程序,你参考一下
#include "stc.h"
我另外发布一个帖子