嵌入式系统第六章作业1

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

  1. 波特率:通信双方传输数据的速度,以每秒传输的比特数(bps)表示。
  2. 数据位:每个字符的数据位数,常见的有8位、7位等。
  3. 停止位:每帧数据结束后的停止位,常见的有1位和2位。
  4. 奇偶校验:用于错误检测的奇偶校验,常见的有无校验(None)、偶校验(Even)、奇校验(Odd)。
  5. 控制模式:包括硬件控制流(Hardware Flow Control)等。

static void MX_USART2_UART_Init(void) {
    huart2.Instance = USART2;
    huart2.Init.BaudRate = 115200;  // 波特率
    huart2.Init.WordLength = UART_WORDLENGTH_8B;  // 数据位
    huart2.Init.StopBits = UART_STOPBITS_1;  // 停止位
    huart2.Init.Parity = UART_PARITY_NONE;  // 奇偶校验
    huart2.Init.Mode = UART_MODE_TX_RX;  // 发送和接收模式
    huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;  // 硬件流控制
    huart2.Init.OverSampling = UART_OVERSAMPLING_16;  // 过采样
    if (HAL_UART_Init(&huart2) != HAL_OK) {
        // 初始化错误处理
        Error_Handler();
    }
}

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

BRR=72MHZ / 115200 = 625

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

在这里面:\04-Software\CH06\UART-STM32L431-ADDR-20210103

表中一共有99项。

四.以下是中断源使能函数,假设中断源为TIM6,将函数实例化(写出值)。

  if ((int32_t)(IRQn) >= 0)判断IRQn是否大于等于0,因为IRQn是一个枚举类型,实际上是一个整数值,因此这一步是为了确保传入的中断号是有效的。通过位运算确定需要设置的寄存器和位。这里涉及到三个部分:((uint32_t)IRQn) >> 5UL 表示将中断号右移5位,这是因为每个寄存器可以管理32个中断,所以需要用中断号除以32得到对应的寄存器号。
(1UL << (((uint32_t)IRQn) & 0x1FUL)) 表示将1左移中断号对32取余的位数,这是因为每个寄存器中的位号对应一个中断号,需要用中断号对32取余得到在寄存器中的位置。
最终结果为将1左移中断号对32取余的位数,得到需要设置的中断位。
NVIC->ISER[1] = 1 << 22将得到的中断位写入到对应的NVIC->ISER寄存器中,使得对应的中断被使能。

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

不可以正常中断,将UART_2和TIM6在中断向量表中的位置和IRQ号交换后,UART_2无法正常中断,因为中断请求和处理程序都不匹配。为了使UART_2正常中断,必须确保中断向量表和IRQ号配置正确,不进行这种交换。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值