第六章嵌入式作业

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

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

选用UART_2串口,并在user.h中定义宏UART_User以提高程序的可移植性。
UART2串口的引脚分别为PTA2(TX发送)和PTA3(RX接收)。

(2)在main.c中初始化UART_User串口的波特率。

假设波特率为115200:

uart_init(UART User,115200);//初始化串口模块

(3)printf的设置:格式化输出函数printf灵活地从串口输出调试信息

在printf头文件中宏定义需要与printf相关联的调试串口号

#define UART_printf UART_2 //printf函数使用的串日号

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

//配置波特率
if(*uart_cr1&(0x1UL<<15)==(0x1UL<<15))
  usartdiv =(uint16 t)((systemcoreclock/115200)*2);
else
  usartdiv =(uint16t)((systemcoreclock/115200));
*uart brr = usartdiv;

波特率:115200
SystemCoreClock=72MHz

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

中断向量表存放在 03_MCU/startup/startup_stm32|431rctx.s 中

表中共有99个中断,前16个为内核中断,后面的为非内核中断

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

函数传入参数为IRQn(中断号),因为中断源为TIM6,查表可知

  • TIM6对应接受中断的IRQ号为54,54≥0进入if{}

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

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

则将ISER[1]的第22位设置为1

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

假设将 UART_2 和 TIM6 在中断向量表中的位置和 IRQ 号进行交换:

这样,UART_2 的中断号将变为 TIM6 的原始中断号,即 54。

而 TIM6 的中断号将变为 UART_2 的原始中断号,即 38。

只要在交换后,新的中断号没有被其他设备占用,并且相关的中断配置正确更新,那么 UART_2 仍然可以正常中断。

这是因为中断号的改变不影响中断控制器 NVIC 的配置,只是改变了中断向量表中的中断函数入口地址。

需要特别注意的是,在进行中断号交换时,务必确保相关的中断配置和中断处理函数都正确更新,以免影响 UART_2 的中断功能。

  • 13
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值