本帖最后由 woai32lala 于 2023-3-17 20:27 编辑
【APM32F107VCT6 MINI开发板测评】之串口测评 无论是从事单片机、ARM,还是FPGA、DSP开发,都离不开串口!而且在一些银行、金融、证券、电信、工控的应用场合,还可能需要在一台主机上同时使用几十路串口! AMP32F107VCT6共有5个串口,USART1、USART2、USART3、UART4和UART5。
这款芯片的串口资源还是相当的丰富的。 串口在使用很重要的一个功能的打印信息,也就是用到了printf函数,几乎每种ARM中都有这种重映射,非常方便。串口直接打印字符串,可以通过重映射C语言中的printf函数来实现。
下面我们就用例程USART_Interrupt来测评一下。
串口初始化
1、使能对应的管脚时钟和串口时钟,要注意的是串口1和串口2位于不同的时钟总线上,串口1位于APB2总线,串口2位于APB1总线。 2、设置波特率位115200 3、设置串口的接收和发送功能,无奇偶校验,1个停止位,8个数据位。 4、使能串口1的USART_INT_TXBE: Tansmit data buffer empty interrupt,当寄存器数据为空时,使能串口1的寄存器为空中断处理函数。 5、使能串口2的接收中断函数,当有数据发送给串口2的接收引脚时,进入串口2的接收中断函数。 6、设置两个串口中断的优先级,串口1抢占优先级为2,串口2抢占优先级为1,可以看出串口2的优先级比串口1高。但在程序中华并没有看到对中断优先级的分组?来解释一下,系统复位后,系统复位之后,会将NVIC内核寄存器SCB->AIRCR的BIT10:8这三位变成000,也就是说默认采用分组方法0:从BIT0处进行分组,即BIT0代表子优先级,BIT1-7代表抢占优先级。具体在实际为4位的优先级系统中,则4位全都是抢占优先级,没有子优先级。
这样的话,抢占优先级范围为0-15共16级,0级响应优先级,所以开机不设定优先级分组也是可以工作的。此时,任意两个中断之间都是抢占关系(当然只有数值低的中断才能抢占数值高的中断了,注意数值越低越优先),你后面在给每个中断分配优先级时,抢占优先级可以在0-15内选择,无须设置响应优先级,假如这种优先级分组可以满足你全系统的实际要求,开机不设置优先级也无妨的。
串口1中断处理函数
可以看到进入该函数后,count ++,串口1发送数据txBuf数组中对应下标数据,当count值计数到数组大小值后,count被清0。
串口2中断处理函数
我们可以看到串口2中断处理函数,当串口2接收到数据后,进入中断,读取接收到的数据后,并通过printf函数打印格式化输出。 可以看到程序使用串口2作为打印输出COM口。 下面我们用逻辑分析仪测试串口1数据输出,用XCOM2上位机给串口2发送数据并接收发回数据。
接线
程序运行 1、程序开始运行后,进入发送寄存器为空中断,进行数据发送,我们用逻辑分析仪接收数据,下面是接收的数据。 2、XCOM2给串口2发送数据,串口2接收数据并将接收到的数据发送出来
可以看到watch中接收到的数据和XCOM发送数据一致。 以上就是对AMP32F107VCT6的串口测评。
|