AI8051U之温故学习打卡
第一集关于“USB不停电下载”的功能,着实方便了日常调试,集成的USBLIB库文件,大大方便了USB初学者直接调用。
针对USBLIB集成库文件,可否增加外部修改USB描述符的接口,
这是USB的精华所在之一,完全屏蔽不让修改,似乎也不太好,半开放为宜!
【国芯人工智能官方回复】
尊敬的用户,您好!
感谢您对AI8051系列芯片的关注与支持,也感谢您在“温故学习打卡”系列中的积极参与。关于您提到的“USB不停电下载”功能以及USBLIB库文件的相关建议,我们高度重视,并在此作出专业回应。
首先,“USB不停电下载”功能是AI8051系列芯片在开发调试过程中的一项重要优化,旨在提升开发效率、减少调试时间。该功能通过集成USBLIB库文件,实现了无需外接电源即可完成固件更新与调试操作,极大地方便了开发者,尤其是初学者快速上手USB通信模块。
关于您提出的“是否可增加外部修改USB描述符的接口”的问题,我们非常认同您的观点。USB描述符是USB设备的核心配置信息之一,它决定了设备在主机端的识别方式和行为表现。在实际应用中,不同场景下往往需要对描述符进行定制化配置,以适配不同的硬件环境或应用场景。因此,完全屏蔽对USB描述符的修改确实可能限制了产品的灵活性与适用性。
针对这一问题,我们已将您的建议纳入后续产品优化规划中。未来版本的USBLIB库文件中,我们将考虑提供更开放的接口机制,允许开发者在一定范围内对USB描述符进行自定义配置,同时确保系统的稳定性和兼容性。具体实现方式将结合SDK文档进行详细说明,以便开发者能够安全、高效地使用该功能。
此外,我们也建议开发者在使用USBLIB库时,充分理解USB协议的基本原理,包括设备描述符、配置描述符、接口描述符等结构,这将有助于更好地掌握USB通信机制,并在实际开发中灵活运用。
再次感谢您的宝贵意见,我们会持续关注用户需求,不断优化产品功能,提升用户体验。如您在使用过程中遇到其他问题或有更多建议,欢迎随时与我们联系。
国芯人工智能团队
2025年4月
[本文内容由国芯人工智能辅助生成,仅供参考] 建议直接从下面这3个最简单的程序开始
还是从 printf_usb("Hello World !\r\n") 开始,《单片机原理及应用》入门@Ai8051U - 51 发烧友,UAC,极致音频,大国工匠,艺术人生,乐林漫步 国芯技术交流网站 - AI32位8051交流社区
第二集
定时器中断
关于12T和1T的速度选择:
stc单片机已支持1T高速模式,要注意配置AUXR辅助寄存器,
T0x12: 定时器0速度控制位
0, 定时器0是传统8051速度,12分频;
1, 定时器0的速度是传统8051的12倍,不分频
T1x12: 定时器1速度控制位
0, 定时器1是传统8051速度,12分频;
1, 定时器1的速度是传统8051的12倍,不分频
T2x12: 定时器2速度控制位
0, 定时器2是传统8051速度,12分频;
1, 定时器2的速度是传统8051的12倍,不分频
第三集定时器周期性调度任务
定时器周期性调度任务是个好东西,可以实现类似 freertos 的嵌入式实时操作系统效果
//========================================================================
// 函数: Task_Handler_Callback
// 描述: 任务标记回调函数.
// 参数: None.
// 返回: None.
// 版本: V1.0, 2012-10-22
//========================================================================
void Task_Marks_Handler_Callback(void)
{
u8 i;
for(i=0; i<Tasks_Max; i++)
{
if(Task_Comps.TIMCount) /* If the time is not 0 */
{
Task_Comps.TIMCount--; /* Time counter decrement */
if(Task_Comps.TIMCount == 0) /* If time arrives */
{
/*Resume the timer value and try again */
Task_Comps.TIMCount = Task_Comps.TRITime;
Task_Comps.Run = 1; /* The task can be run */
}
}
}
}
第四集IO中断
所有普通IO口都支持外部中断,不是传统中断,支持下降沿、上升沿、低电平、高电平四种中断模式,极大丰富了中断应用场景
void P3_IO_ISR(void) interrupt 40
{
u8 intf;
intf = P3INTF;
if( intf ) //判断也没有IO触发了中断
{
P3INTF = 0;
if( intf & 0x08 )//判断是否是P33按钮按下
{
passward = 1;
//P01 = !P01;
}
}
}
第五集串口的高级应用
奇偶校验
在一般应用场景下,通常无校验,但在电磁环境复杂的工业场景下,还是需要设置校验位的,再结合起始符、结束符等措施,可以将误码率控制在一个较低的水平。
void Uart2_Init(void) //9600bps@24.000MHz
{
P_SW2 |= 0x01; //UART2/USART2: RxD2(P4.6), TxD2
S2CON = 0x50; //8位数据,可变波特率
AUXR |= 0x04; //定时器时钟1T模式
T2L = 0x8F; //设置定时初始值
T2H = 0xFD; //设置定时初始值
AUXR |= 0x10; //定时器2开始计时
IE2 |= 0x01; //使能串口2中断
UR2TOCR = 0x00; //关闭超时中断
UR2TOTL = 0x04;
UR2TOTH = 0x3b;
UR2TOTE = 0x01;
Rec_Num = 0;
B_TX2_Busy = 0;
B_RX2_OK = 0;
}
第六集ADC_NTC测温
采用NTC电阻测量温度,可通过内部ADC通道进行电压采集,12位的ADC精度,能够满足大多数场景的需求,非常实用,相较以前的stc芯片,提高了ADC的精度和稳定性。
结合恰当的数据滤波、温度查询算法(查表法),能够轻松的获取测量的温度。
第七集比较器
视频老师说的有点简单,这里补充几点:
单片机比较器是单片机内部集成的一种模拟信号处理模块,核心功能是对两个输入电压信号(或一个输入电压与一个参考电压)进行实时比较,并输出高低电平表示比较结果(如 “A 信号电压高于 B 信号电压” 则输出高电平)。
例如可用于:电压阈值检测、信号快速比较与响应、波形整形与转换等
实际意义:简化设计、提升性能、拓展应用
相对于用ADC采集电压,省略了很多步骤。与采用运算放大器的效果是一样的,实时输出比较结果。
还是从 printf_usb("Hello World !\r\n") 开始,《单片机原理及应用》入门@Ai8051U
https://www.stcaimcu.com/thread-16731-1-1.html
第八集 printf_usb
1.采用stcisp的AiCube创建项目
2.配置外设
按照右侧配置usb-cdc外设,不要太方便,可以勾选“与printf_usb函数关联”,使用更加方便,其他自定。usb-cdc功能允许单片机直接连接电脑串口,无需再经过串口转换芯片,极大方便了数据传输、调试,简直是工程师的福音,大爱!
记得配置引脚!
3.打开项目
打开自动生成的项目文件,基础代码已全部自动生成并且配置完毕,无需另外移植、修改底层驱动代码,可以将时间更多的留给项目使用。
4.添加代码
按图,在main函数的while循环中,添加如下测试代码并编译:printf_usb("Hello STC\r\n");delay_ms(1000);打开STC-ISP软件,下载编译好的HEX文件程序,观察CDC/HID-串口助手,此时单片机已循环上传“Hello STC”字符串。至此首个printf_usb输出项目完成,就是这么简单、高效!
页:
[1]
2