[活动专区] 【AT-START-F407测评】+USART速度测试

[复制链接]
 楼主| 呐咯密密 发表于 2021-1-26 16:22 | 显示全部楼层 |阅读模式
本帖最后由 呐咯密密 于 2021-1-29 10:51 编辑

昨天稍微看了一下外观和表面性能,顺便赞扬了一下精美的外观和高主频特性,但是真正决定芯片性能的还必须看外设的性能,流水灯咱就不测试了,我直接就从USART开始。
因为板载了AT-Link,我就没有再外接其他LINK,按照手册所说,接上开发板,在keil的Debug 里选择 CMSIS-DAP 调试器。
第一个程序选择Printf(),测试例程和最基础的USART的使用。因为使用例程,就不多啰嗦代码的东西了,烧录连接串口助手,查看现象:
94035600fc3a438a16.png
成功打印信息,测试通过。
下面测试串口的响应速度,因为在我的应用中,一向很看重串口的响应速度。
1.串口接收一个数据,触发中断后判断数据是否正确,正确返回另一个数据,采用库函数方式,波特率2500000,主频240M。
首先使能USART1的时钟、端口复用和引脚重定向:
  1. RCC_APB2PeriphClockCmd( RCC_APB2PERIPH_AFIO | RCC_APB2PERIPH_USART1, ENABLE);//使能USART1
然后设置相关引脚:
  1.   /* Configure USART1 Rx as input floating */
串口配置:
  1.   USART_StructInit(&USART_InitStructure);
  2.   USART_InitStructure.USART_BaudRate = 2500000;
  3.   USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  4.   USART_InitStructure.USART_StopBits = USART_StopBits_1;
  5.   USART_InitStructure.USART_Parity = USART_Parity_No;
  6.   USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  7.   USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

  8.   /* Configure USART1 */
  9.   USART_Init(USART1, &USART_InitStructure);
  10.   
  11.   /* Enable USART1 Receive and Transmit interrupts */
  12.   USART_INTConfig(USART1, USART_INT_RDNE, ENABLE);

  13.   /* Enable the USART1 */
  14.   USART_Cmd(USART1, ENABLE);
  15. }

设置中断;
  1. void NVIC_Configuration(void)
  2. {
  3.   NVIC_InitType NVIC_InitStructure;

  4.   /* Configure the NVIC Preemption Priority Bits */  
  5.   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);

  6.   /* Enable the USART1 Interrupt */
  7.   NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
  8.   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  9.   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  10.   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  11.   NVIC_Init(&NVIC_InitStructure);

  12. }
配置中断函数:
  1. void USART1_IRQHandler(void)
  2. {
  3.         uint8_t RxData;
  4.   if(USART_GetITStatus(USART1, USART_INT_RDNE) != RESET)
  5.   {
  6.         RxData = USART_ReceiveData(USART1);
  7.           if(RxData == 0x01)
  8.           {
  9.                 USART_SendData(USART1,0x55);
  10.           }
  11.   }

  12. }
烧录进开发板,串口助手打开,使用定时发送0x01,此时串口返回0x55,接上示波器查看波形:
75618600fcf60409de.png
39582600fced0b6b70.png
38922600fd000270ab.png
41124600fd01ed0bd6.png
从串口相应中断开始接收数据,到第一个数据发送间隔4.9us,从串口接收完数据到发送的第一个数据之间间隔1.4us,接收一个八位数据需要3.5us,发送一个八位数据需要3.6us。在240M主频和2.5M的波特率加持下这个速度并不是很理想,因为使用的是库函数所以这里不能完全说明单片机的性能,可能和库函数有关。后面会以跟帖的形式测试不使用库函数,直接操作寄存器的方式最大速度跑。

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

本版积分规则

认证:苏州澜宭自动化科技嵌入式工程师
简介:本人从事磁编码器研发工作,负责开发2500线增量式磁编码器以及17位、23位绝对值式磁编码器,拥有多年嵌入式开发经验,精通STM32、GD32、N32等多种品牌单片机,熟练使用单片机各种外设。

567

主题

4081

帖子

56

粉丝
快速回复 在线客服 返回列表 返回顶部