第六章作业1

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

确定MCU串口号、所接MCU的引脚:

波特率(Baud Rate):确定数据传输速率的参数,必须与接收端相匹配。

停止位(Stop Bits):指定停止位的数量,通常为1位或2位。

校验位(Parity Bit):可选的奇偶校验位,用于数据的校验。

数据流控制(Flow Control):可选的硬件或软件流控制机制,用于控制数据传输的流量

使能UART功能:启用UART发送和接收功能。最后,开启UART功能使能位,使UART开始正常工作。

uart_cr1: UART控制寄存器1基地址,用于配置UART的工作模式和使能相关功能。

uart_brr: UART波特率寄存器地址,用于配置波特率。

uart_isr: UART中断和状态寄存器基地址,用于配置中断相关设置。

uart_cr2: UART控制寄存器2基地址,用于配置UART的工作模式。

uart_cr3: UART控制寄存器3基地址,用于配置UART的工作模式。

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

//配置波特率 if(*uart_cr1&(0x1UL<<15) == (0x1UL<<15))

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

else

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

 *uart_brr = usartdiv;

  • 对于 OVER8 模式(系数为8):USARTDIV = 2*72MHz / 115200 = 1250
  • 对于非 OVER8 模式(系数为16):USARTDIV = 72MHz / 115200 = 625

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

如图中断向量表在03_MCU里startup的第一个文件startup_stm321431rctx.s

从第141行到第239行,总共99项。前16个为内核中断,后面的为非内核中断。

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

查表,TIM6对应接受中断的IRQ号为54

·  ISER[(((uint32_t)IRQn) >> 5UL)]函数内部实现将IRQ号值右移5位

54>>5=1 , 索引值为1

·  (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)) 确定要设置的位数

54 & 0x1F = 22 , 第22位

即54除以32余22,所以将ISER[1]的第22位设置为1

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

交换UART_2和TIM6在中断向量表中的序号和IRQ号会导致中断处理函数的映射关系发生改变,这可能使得UART_2的中断无法正常执行。即便UART_2的中断向量指向其原始位置,实际触发的将是TIM6的中断处理程序,从而造成UART_2的中断无法被正确地识别或处理。

在这种情况下,UART_2原本的中断号38会变成54,而TIM6原本的中断号54则会变成38。为了确保UART_2的中断能够正常工作,中断向量表中UART_2的序号和IRQ号需要保持一致,因为中断号的变更并不影响NVIC中断控制器的设置,它只是更改了中断向量表中指向中断处理函数的地址。同时,中断处理程序也需要正确地配置。如果你打算交换这两个中断的位置,必须相应地调整中断向量表和中断处理程序的设置,以保证中断功能的正常运行。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值