本帖最后由 呐咯密密 于 2021-1-29 10:51 编辑
昨天稍微看了一下外观和表面性能,顺便赞扬了一下精美的外观和高主频特性,但是真正决定芯片性能的还必须看外设的性能,流水灯咱就不测试了,我直接就从USART开始。
因为板载了AT-Link,我就没有再外接其他LINK,按照手册所说,接上开发板,在keil的Debug 里选择 CMSIS-DAP 调试器。
第一个程序选择Printf(),测试例程和最基础的USART的使用。因为使用例程,就不多啰嗦代码的东西了,烧录连接串口助手,查看现象:
成功打印信息,测试通过。
下面测试串口的响应速度,因为在我的应用中,一向很看重串口的响应速度。
1.串口接收一个数据,触发中断后判断数据是否正确,正确返回另一个数据,采用库函数方式,波特率2500000,主频240M。
首先使能USART1的时钟、端口复用和引脚重定向:
- RCC_APB2PeriphClockCmd( RCC_APB2PERIPH_AFIO | RCC_APB2PERIPH_USART1, ENABLE);//使能USART1
然后设置相关引脚:
- /* Configure USART1 Rx as input floating */
串口配置:
- USART_StructInit(&USART_InitStructure);
- USART_InitStructure.USART_BaudRate = 2500000;
- USART_InitStructure.USART_WordLength = USART_WordLength_8b;
- USART_InitStructure.USART_StopBits = USART_StopBits_1;
- USART_InitStructure.USART_Parity = USART_Parity_No;
- USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
- USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
- /* Configure USART1 */
- USART_Init(USART1, &USART_InitStructure);
-
- /* Enable USART1 Receive and Transmit interrupts */
- USART_INTConfig(USART1, USART_INT_RDNE, ENABLE);
- /* Enable the USART1 */
- USART_Cmd(USART1, ENABLE);
- }
设置中断;
- void NVIC_Configuration(void)
- {
- NVIC_InitType NVIC_InitStructure;
- /* Configure the NVIC Preemption Priority Bits */
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
-
- /* Enable the USART1 Interrupt */
- NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
- }
配置中断函数:
- void USART1_IRQHandler(void)
- {
- uint8_t RxData;
- if(USART_GetITStatus(USART1, USART_INT_RDNE) != RESET)
- {
- RxData = USART_ReceiveData(USART1);
- if(RxData == 0x01)
- {
- USART_SendData(USART1,0x55);
- }
- }
- }
烧录进开发板,串口助手打开,使用定时发送0x01,此时串口返回0x55,接上示波器查看波形:
从串口相应中断开始接收数据,到第一个数据发送间隔4.9us,从串口接收完数据到发送的第一个数据之间间隔1.4us,接收一个八位数据需要3.5us,发送一个八位数据需要3.6us。在240M主频和2.5M的波特率加持下这个速度并不是很理想,因为使用的是库函数所以这里不能完全说明单片机的性能,可能和库函数有关。后面会以跟帖的形式测试不使用库函数,直接操作寄存器的方式最大速度跑。
|