第十一章AT32F403A替换stm32f103 usb虚拟串口通讯测试
前言
此文章是使用AT32F403A的开发板去跑stm32f103的usb虚拟串口通讯功能的测试情况。
硬件
硬件方面使用的是自己画的板子,使用的AT32F403ARCT7,外设方面有USART2、USART3、CAN1、CAN2、SPI、IIC、USB、SDIO;USART接的是sp3485的芯片;CAN的收发芯片都是SIT1050(芯力特国产品牌,可替换tja1050);SPI的是接了一颗W25Q128,16M的容量;IIC接的是一颗AT24C04;SDIO可插SD卡。仿真口以及串口1则使用的ATLINK的接口定义,直接使用ATLINK插上即可。USART2和USART3的485芯片,可以通过跳线帽对接起来;CAN1和CAN2也是一样。
软件
测试使用的软件是stm32f103的3.5标准库的工程代码。想快速验证的可以下正点、野火等的代码回来再根据自己外设的硬件的设计稍微修改就可以进行测试,就是库是stm32F103的3.5标准库的。
下面是为了符合硬件去改动的一些代码(我板子没有显示屏)。(要是硬件都和那些教程都一样的,可以直接下载就可以。)
软件相关部分:
extern u16 USB_USART_RX_len;
int main(void)
{
u16 t;
u16 len;
u16 times=0;
u8 usbstatus=0;
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart1_init(115200); //串口初始化为115200
AT32LED_Init(); //初始化与LED连接的硬件接口
delay_ms(1800);
USB_Port_Set(0); //USB先断开
delay_ms(700);
USB_Port_Set(1); //USB再次连接
Set_USBClock();
USB_Interrupts_Config();
USB_Init();
usb_printf ("AT32F403A 替换SXX32f103 usb 虚拟串口通讯测试!!\r\n");
while(1)
{
if(USB_USART_RX_STA==1)
{
len=USB_USART_RX_len;//得到此次接收到的数据长度
usb_printf("\r\n您发送的消息为:%d\r\n\r\n",len);
for(t=0;t<len;t++)
{
USB_USART_SendData(USB_USART_RX_BUF[t]);//以字节方式,发送给USB
}
usb_printf("\r\n\r\n");//插入换行
USB_USART_RX_STA=0;
USB_USART_RX_len=0;
}else
{
times++;
if(times%200==0)
{
usb_printf("\r\nUSB虚拟串口测速\r\n");
}
delay_ms(10);
}
}
}
测试结果
通过看串口助手的log,程序已经运行起来,收发的数据和我们设定的是一致的:
总结
从测试来看,AT32F403A是可以直接的跑stm32f103的usb的代码,在使用上一致。
本文仅供于学习、测试使用。
有什么问题的可加qq群技术交流。