MCU驱动使用(三)
十、USB的使用十一、MAC的使用
十二、SPI的使用
十三、ADC/DAC的使用
十、USB的使用AG32已经在工程中集成tinyUSB,可自行关联使用。
usb使用到的PIN脚,是固定的管脚,不能在ve中进行改变。
目前支持:单纯device端、单纯host端、OTG自动切换主从端;
三种情况要支持的枚举类型,可以在配置头文件中自行配置。
例程位于路径examples\usb下:
简单应用举例(使用device样例,其他两个相似):
在device的例程中,usb被同时枚举为cdc和 msc(还支持HID和MIDI)。
1. vsCode打开该文件夹工程;
打开后如图:
2. 直接烧录ve和程序bin;
烧录ve:
烧录bin:
3. 上电启动,然后USB线连接到电脑(开发板上对应micro口的那个USB口)
就可以看到PC端的U盘和cdc串口,如下图:
(cdc串口)
(U盘)
如果没有显示出来,可以烧录并跟踪程序,看是否出现board_init失败(板子不同, 可能会带来board初始化的失败)
以上是demo验证。
如果要集成到自己的工程(如,要在example中使用),需要修改:
1. Platformio.ini中增加对tinyUsb的引用:
注意,引用多个库时,用逗号隔开,并且逗号后边要加空格。
2. ve文件中增加:
3. 代码部分调整:
将tinyusb下的src路径文件,修改main.c后放入example下的src。
修改点:
Main.c文件重命名;main()函数重命名;去除main()中的board_init函数;
重命名后的main函数在example下的main()中调用;
4. 编译并烧录ve和代码,即可正常运行。
在例程中,USB描述符、回调、配置(CDC、HID、MSC、MIDI)均已通过接口开放出来, 在src路径下的.c.h中。用户可根据自己的需求订制或修改。
可通过头文件中的宏来配置要开放的枚举类型:
更多配置部分及usb接口使用详解,可参考sdk下tinyUSB路径下的文件描述,或者参考tinyUSB官方介绍。
目前样例是cdc+msc,更多的样例工程(目前有:cdc_msc_hid_midi、两个cdc、单个cdc、单个msc、在103上集成usb),
请从海振远科技提供的网盘资料下载:https://pan.baidu.com/s/1wcBnqnray7bu4IURDIoDDQ?pwd=1205 目录:\其他文档\常用样例工程补充\
更多的参考资料,可以从海 振 远 科 技 提供的SDK包或者网盘资料获取。
.
十一、MAC的使用AG32支持MAC模块。
支持RMII/MII接口。
目前SDK中集成了Lwip2.1.0版本。在lwip样例中,使用了server端的功能。
样例使用:
打开样例工程lwip,
在开发板上测试例程时,步骤:
[*]分别编译并烧录ve和code;
[*]然后用网线连接 PC和开发板,并修改PC的IP地址为 192.168.5.2;
[*]在PC的浏览器上输入: http://192.168.5.1
此时,可以在网页上看到开发板中展示的画面:
移植到自己的板子上时,注意两项配置:
1. 根据自己的板子,可能需要修改的是phy地址:
2. 修改ve配置文件中mac相关IO对应,如:
上层部分,使用什么样的网络,则自行配置lwip。
除了SDK下自带的lwip(http_server样例),海振远网盘资料上还放有tcp_server和tcp_client的样例工程。
更多的参考资料,可以从海 振 远 科 技 提供的SDK包或者网盘资料获取。
.
十二、SPI的使用AG32支持两路SPI,分别对应:SPI0、SPI1;
两路是功能对等的。仅支持SPI-Master端。
SPI是一种全双工同步的串行通信,可支持高速数据传输。
采用主-从模式(Master-Slave) 的控制方式,通过对 Slave 设备进行片选 (Slave Select) 来控制多个 Slave 设备。
样例程序参考example_spi.c
在例程中,使用了SPI_FLASH的dma方式。
注意,这里的SPI驱动都是针对SPI_FLASH的封装,并不用于通用SPI。
SPI支持1线、2线和4线。
如果是用于通用SPI外设(非FLASH),请参考样例程序example_spi_common.c。
需要注意的是:
由于这里SPI底层是针对FLASH使用的封装,所以对通用SPI外设支持并不全面。
如果要用于普通外设,则该外设必须满足如下时序:
[*]1. SPI交互时第一段只能是tx(不能是rx);
[*]2. 收和发不能同时进行(只能是发完再收);
[*]3. 并且极性(CPOL)和相位(CPHA)的设置值都是1。
更详细的使用说明和样例,请参考example和datasheet。
补充:
从SDK1.2.4版本开始,增加了对通用SPI的支持。
原 example_spi_common.c 中提供的函数:
1. Send:单纯发送数据,字节数不限制;
2. SendAndRecv:在一个片选周期内,发送一段数据,再接收一段数据;
其中发送长度最长 4byte,接收长度不限。
(如果发送长度要更长,请自行在 C 驱动中扩展。)
这个版本开始,会在以上基础上,扩展出来两个函数:
3. Recv:单纯收取数据,接收长度不限;
4. SendWithRecv:在发送数据的同时来收(双向传输),而不是发完后再收。
收取数据和发送数据的长度等长,并且增加了对极性和相位的设置。
但这两个函数,需要cpld的支持,用起来比较费劲。
更详细的使用说明,请参考海振远科技 网盘下 \其他文档\AG32下spi的拓展使用\AG32下spi的拓展使用.pdf
更多的参考资料,可以从海 振 远 科 技 提供的SDK包或者网盘资料获取。
.
十三、ADC/DAC的使用ADC/DAC包含模拟电路,需要cpld部分的支持。
AG32自带一套cpld逻辑(默认ip),
在默认的ip中,支持3路ADC和2路DAC,1路比较器CMP(双通道,可独立运行)。
使用样例ADC:
在样例代码example_analog.c中,adc默认是宏关闭的。可在platformio.ini中打开该宏:
【-DIPS_ANALOG_IP】
同时,使能默认的ip,在platformio.ini中配置:
然后在main()函数中放开TestAnalog() 即可。
注意,第一次打开ADC/DAC功能时,需要重新编译烧录一次ve:
ADC共有15个channal,每个channal均可配置到任一个ADC上。
ADC的简单使用:
参考TestAdc函数,ADC不需要在ve里管脚映射,不需要设置IO复用。
使用以下4个函数即可:
如果需要多次转换,则重复调用后3个函数。
如果有自己的cpld,希望裁剪ADC,或者对ADC有更高的定制,请参考海振远科技网盘下ADC的专题讲解《analog中对ADC的剪裁.pdf》,以及《Analog代码分析.pdf》,这部分比较复杂。
更多的参考资料,可以从海 振 远 科 技 提供的SDK包或者网盘资料获取。
请联系海振远科技。
页:
[1]