硬汉嵌入式论坛

 找回密码
 立即注册
查看: 922|回复: 0
收起左侧

[客户分享] AT32 MCU OTG使用----AT_SURF案例16

[复制链接]

41

主题

1

回帖

124

积分

初级会员

积分
124
发表于 2022-4-1 19:52:23 | 显示全部楼层 |阅读模式
1.简介
AT32F437 芯片内部含有两个独立的OTGFS 模块,支持控制传输、大容量、中断和同步传输,
OTGFS 模块由OTGFS controller、内置物理层(PHY)以及独立1280 字节SRAM 组成。
OTGFS 是USB 全速双角色设备(DRD)控制器,由ID 线的状态控制OTGFS 为主机还是设备:当
ID 线浮空时,OTGFS 作为设备,当ID 线接地时,OTGFS 为主机。OTG PHY 内置了1.5KΩ 上拉
电阻和15KΩ 下拉电阻,以满足双角色设备需要。
OTGFS 作为设备时,支持1 个双向控制端点,7 个IN 端点、7 个OUT 端点;做为主机时,支持16
个主机通道。
OTGFS 支持挂起模式,进入挂起模式后OTGFS 处于省电模式。
OTGFS 作为设备时,为所有OUT 端点分配一个统一的FIFO 缓存,为每个IN 端点各自分配一个单
独的FIFO 缓存;OTGFS 作为主机时,为所有的接受通道分配了一个统一的接收FIFO,为所有非周
期性发送通道分配一个统一的发送FIFO,为所有周期性发送通道分配一个统一的发送FIFO。
OTGFS 支持挂起模式,在时钟门控寄存器(OTGFS_PCGCCTL)的STOPPCLK 位置位后,当连续
3ms 未收到总线信号时,OTGFS 会进入挂起模式;OTGFS 还可以通过配置OTGFS 通用控制器配
置寄存器(OTGFS_GCCFG)的LP_MODE 位关闭PHY 的接收功能,从而达到降低功耗效果。
本例程演示了使用OTG 实现虚拟串口的功能,使用时需先使用USB 线连接SUFR 板的OTG1 接口
和电脑。


2.资源准备
硬件环境:
对应产品型号的AT-SURF-F437 Board
软件环境:
AT32F435_437_Firmware_Library_V2.x.x\project\at_sufr_f437\examples\otg

3.硬件设计
本案例使用的硬件资源有TFT LCD 液晶显示屏、USB 外设,对应的引脚如下:
1.PNG
对应的电路原理如下:
image.png
4.软件设计
1) OTG 测试
    初始化OTG
    PC 端发送数据到SUFR 板
    当SUFR 板接收到数据后,在LCD 屏上显示接收到的数据
    然后再发送接收到的数据到PC
2) 代码介绍
    main 函数代码描述
int main(void)
{
uint16_t data_len;
uint32_t timeout;
uint8_t send_zero_packet = 0;
/* 初始化系统时钟 */
system_clock_config();
/* 初始化中断优先级分组 */
nvic_priority_group_config(NVIC_PRIORITY_GROUP_4);
/* 初始化延时函数 */
delay_init();
/* 初始化LCD */
lcd_init(LCD_DISPLAY_VERTICAL);
/* 初始化otg */
otg_init();
/* 显示信息 */
lcd_string_show(10, 20, 300, 24, 24, (uint8_t *)"OTG Test");
/* 显示信息 */
lcd_string_show(10, 50, 300, 24, 24, (uint8_t *)"Virtual Serial Port");
while(1)
{
/* 获取接收到的数据 */
data_len = usb_vcp_get_rxdata(&otg_core_struct.dev, usb_buffer);
if(data_len > 0 || send_zero_packet == 1)
{
/* 显示接收到的数据 */
lcd_fill(10, 80, 300, 140, WHITE);
lcd_string_show(10, 80, 300, 24, 24, (uint8_t *)"Receive data:");
lcd_string_show(10, 110, 300, 24, 24, usb_buffer);
if(data_len > 0)
send_zero_packet = 1;
if(data_len == 0)
send_zero_packet = 0;
timeout = 5000000;
do
{
/* 发送数据到主机 */
if(usb_vcp_send_data(&otg_core_struct.dev, usb_buffer, data_len) == SUCCESS)
{
break;
}
}while(timeout --);
}
}
}

5.下载验证
    1) PC 端通过串口助手发送“Artery 2022”到SUFR 板。
    2) 当接收到数据后,在LCD 屏上显示接收到的数据。
    3) 然后SUFR 板再将接收到的数据“Artery 2022”发送到PC。
    图1. PC 端串口助手
image.png
图2. SUFR 板端
image.png


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-18 12:32 , Processed in 0.163653 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表