作业1
1、编写UART_2串口发送程序时,初始化需要设置哪些参数?
初始化需要设置以下等参数
- 波特率:设置通信的速率。
- 数据位:指定每个字符中的数据位数。
- 停止位:指定每个字符之后停止位的数目。
- 校验位:指定用于错误检测的校验位类型。
- 流控制:确定是否启用硬件流控制或软件流控制来控制数据流向。
- 缓冲区大小:设置发送数据的缓冲区大小,以确保数据不会丢失或溢出。
- 中断或轮询模式:确定是使用中断驱动的方式还是轮询方式来发送数据。
- 时钟源和频率:设置UART模块的时钟源和频率,以确保通信的稳定性和准确性。
2、假设速度为115200,系统时钟为72MHz,波特率寄存器BRR中的值应该是多少?
当过采样因子为8时:
USARTDIV = 2*72MHz / 115200 = 1250
当过采样因子为16时:
USARTDIV = 72MHz / 115200 = 625
3、中断向量表在哪个文件中?表中有多少项?给出部分截图。
中断向量表在文件\03_MCU\startup\startup_stm32|431rctx.s中,表中共有98项。
4、以下是中断源使能函数,假设中断源为TIM6,将函数实例化(写出各项具体数值)。
寻找中断源的中断号
可以发现TIM6的中断号为54
尝试将该函数实例化:
__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) //IRQn = 54
{
if ((int32_t)(IRQn) >= 0)
{
NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
}
将NVIC->ISER[1]的第22位设为1
5、假设将UART_2和TIM6交换其在中断向量表中的位置和IRQ号, UART_2可以正常中断吗?
可以正常中断。因为中断的处理不依赖于它在向量表中的位置,而是根据IRQ号来识别和处理中断。
作业2
实现UART_2串口的接收程序,当收到字符时:
①在电脑的输出窗口显示下一个字符,如收到A显示B;
②亮灯:收到字符G,亮绿灯;收到字符R,亮红灯;收到字符B,亮蓝灯;收到其他字符,不亮灯。
实现方式:
(1) 用构件调用方式实现;
(2) UART部分用直接地址方式实现(即不调用uart.c中的函数,其他部分如GPIO、中断设置可调用函数)。
主要程序的源码如下:
1.当收到字符时,在电脑的输出窗口显示下一个字符,如收到A显示B;
更新串口后打开串口工具,并输入字符A
可以发现输出窗口输出了A的下一个字符B
继续输入字符进行实验
发现可以正确输出每个字符的下一位,该项功能顺利完成。
2.亮灯:收到字符G,亮绿灯;收到字符R,亮红灯;收到字符B,亮蓝灯;收到其他字符,不亮灯。
发送字符G
亮绿灯
发送字符R
亮红灯
发送字符B
亮蓝灯
发送其他字符A
灯不亮
顺利实现了该项功能。