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 的中断功能。