嵌入式作业五

第一部分

1.编写UART_2串口发送程序时,初始化需要设置哪些参数?

  • 波特率(Baud Rate):指定串口的通信速率,即每秒钟传输的比特数。波特率需要与接收端设备的波特率相匹配,以确保正确的通信。

  • 数据位数(Data Bits):指定每个字符传输的位数。通常为 8 位,但有时也可以是 7 或 9 位。

  • 停止位数(Stop Bits):指定每个字符后停止位的数目。通常为 1 位或 2 位。

  • 校验位(Parity Bit):用于检测数据传输过程中的错误。常见的校验位有奇校验、偶校验、无校验等。

  • 流控制(Flow Control):可选的参数,用于控制数据流的传输。包括硬件流控制(如 RTS/CTS)和软件流控制(如 XON/XOFF)等。

  • 串口模式(Mode):指定串口的工作模式,如同步模式或异步模式。

  • 中断使能(Interrupt Enable):是否启用串口接收或发送中断,以便在数据可用时及时处理。

  • 缓冲区设置:指定接收缓冲区和发送缓冲区的大小,以便存储接收到的数据和待发送的数据。

2.假设速度为115200,系统时钟为72MHz,波特率寄存器BRR中的值应该是多少?

对于 OVER8 模式:

usartdiv = (uint16_t)((SystemCoreClock / 115200) * 2);

此时波特率寄存器BRR的值为 usartdivz=1250
对于非 OVER8 模式:

usartdiv = (uint16_t)(SystemCoreClock / 115200);

此时波特率寄存器BRR的值为 usartdivz=625

3.中断向量表在哪个文件中?表中有多少项?给出部分截图

中断向量表在文件~\03_MCU\startup\startup_stm32l431rctx.s中,表中内容如下

一共有99项

4.以下是中断源使能函数,假设中断源为TIM6,将函数实例化(写出各项具体数值)

在查找/替换窗口查找TIM6,可以找到其IRQ号为54

然后根据中断使能函数计算得到:

寄存器索引位置:

寄存器索引 = IRQn >> 5UL = 54 >> 5 = 1

位偏移量:

将1左移22位,以得到一个数值,只有第22位为1,其他位为0:

(1UL << 22) = (0x1UL << 22) = 0x00400000UL

uint32_t index = ((uint32_t)TIM6_IRQn) >> 5UL; // 寄存器索引为1
uint32_t offset = ((uint32_t)TIM6_IRQn) & 0x1FUL; // 位偏移为22

5.假设将UART 2和TIM6交换其在中断向量表中的位置和IRQ号, UART 2可以正常中断吗?

在大多数情况下,即使将UART 2和TIM6在中断向量表中的位置和IRQ号进行交换,UART 2仍然可以正常中断。这是因为中断处理程序的执行是由中断向量表中的中断号来确定的,而不是由中断号对应的外设类型来确定的。

当一个中断被触发时,处理器会根据中断向量表中的相应位置跳转到对应的中断处理程序。因此,只要中断向量表中的相应位置被正确设置为UART 2的中断处理程序,即使IRQ号被重新映射到了TIM6,UART 2仍然可以正常中断。

然而,这种交换可能会导致代码的可读性和维护性下降,因为人们可能会期望在特定位置找到特定的中断处理程序。因此,除非有充分的理由需要这样做,否则最好保持中断向量表中的顺序不变。

第二部分

实现UART 2串口的接收程序,当收到字符时:

①在电脑的输出窗口显示下一个字符,如收到A显示B;

②亮灯:收到字符G,亮绿灯;收到字符R,亮红灯;收到字符B,亮蓝灯;收到其他字符,不亮灯。

要求:

1.用构件调用方式实现

2.UART部分用直接地址方式实现(即不调用uart.c中的函数,其他部分如GPIO、中断设置可调用函数)

先修改isr.c中输出的数据,即将原本的回发原本的字节修改为回发收到的字节加一,如下:

结果如下:

如图,发送‘A’输出‘B’,发送‘C’输出‘D’,实现了第一个功能要求

参考isr.c中的代码,将输入的字符提取出来,并进行识别,isr.c中代码如下:

实现代码如下:

最后加上几个判断语句,如果接收到‘R’就亮红灯,‘B’亮蓝灯,‘G’亮绿灯就完成了,最终结果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值