本帖最后由 呐咯密密 于 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的波特率加持下这个速度并不是很理想,因为使用的是库函数所以这里不能完全说明单片机的性能,可能和库函数有关。后面会以跟帖的形式测试不使用库函数,直接操作寄存器的方式最大速度跑。
|