关于定时器中断与uart初始化冲突的感想

        因为我的这种情况参见stm32单片机TIM3定时器中断与usart串口初始化冲突-CSDN博客,一般其他优秀的程序员不会这样做:除非在设计上允许自由运行(freerun),否则tim初始化不包括tim_cmd(tim,enable),也不包括nvic的设置

较为正确的初始化过程:

        按顺序,首先在deinit外设之后,此时外设会确定地在无效状态,包括中断,然后先设置nvic,只一次;接着设置外设,比如tim和usart,但设置后这些外设都不在运行状态,设置好之后等待运行。所有外设设置好之后,再统一按要求顺序enable各个外设

        为安全起见,通常外设比如tim,尽管此时还没运行,在设置它中断使能前,先清除一次中断标志

        这样可以防止因为设置动作产生中断标志

        而在正常运行时更改中断,就需要十分小心了,主要是需要防止“在你更改中断设置时,某些中断已经可能发生”

        就如我的程序,当设置捕获中断允许时,你必须假设在设置的下一条指令就可以发生中断,而发生中断之后的运行动作,必须是你预期好的,因此这个时刻必须是必须的后续外设都已经合适地初始化和正常运行、等待它

        于是,就取决于你的具体编程逻辑了:假设捕获中断时由中断引发计算并把结果通过usart发送,显然在enable这个捕获中断前,usart必须已经初始化好并且等待发送,否则出什么问题,你得处理好了。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
HAL库是针对STMicroelectronics的STM32微控制器的一种软件库,用于简化对硬件抽象层(HAL)的访问。HAL库的UART初始化函数位于stm32f4xx_hal_uart.c文件中。以下是UART初始化的基本步骤: 1. 使能UART时钟(USARTx_CLK_ENABLE())。 2. 配置UART引脚(GPIO)为复用功能(GPIO_Mode_AF)。 3. 配置UART的波特率、数据位、停止位和校验位等参数(UART_InitStruct)。 4. 初始化UART(HAL_UART_Init())。 下面是一个UART初始化的示例代码: ``` /* 使能UART时钟 */ __HAL_RCC_USART1_CLK_ENABLE(); /* 配置UART引脚 */ GPIO_InitStruct.Pin = GPIO_PIN_9 | GPIO_PIN_10; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF7_USART1; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); /* 配置UART参数 */ UART_InitStruct.BaudRate = 115200; UART_InitStruct.WordLength = UART_WORDLENGTH_8B; UART_InitStruct.StopBits = UART_STOPBITS_1; UART_InitStruct.Parity = UART_PARITY_NONE; UART_InitStruct.Mode = UART_MODE_TX_RX; UART_InitStruct.HwFlowCtl = UART_HWCONTROL_NONE; UART_InitStruct.OverSampling = UART_OVERSAMPLING_16; HAL_UART_Init(&huart1); ``` 此示例代码初始化了USART1,并将其配置为8位数据、无校验位、无流控制的模式,并设置波特率为115200。在使用HAL库进行初始化时,需要先定义GPIO_InitTypeDef和UART_InitTypeDef类型的结构体变量GPIO_InitStruct和UART_InitStruct。在初始化完成后,可以通过HAL_UART_Transmit()和HAL_UART_Receive()等函数进行UART的数据传输操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

慵懒之龟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值