stm32w108 Hal_Driver库hal_uart.c的错误

今天调试stm32w108发现Hal_Driver库中hal_uart.c文件内有一处错误,会导致串口读取到无效数据。

原始中断函数如下

void halSc1Isr(void)

{
  uint32_t interrupt;
  /* this read and mask is performed in two steps otherwise the compiler
     will complain about undefined order of __IO access */
  interrupt = SC1_IT->ISR;
  interrupt &= SC1_IT->IER;
  while (interrupt != 0) {
    SC1_IT->ISR = interrupt; /* acknowledge the interrupts early */ /*这里清标志位不起作用*/
    /* RX events */
    if ( interrupt & (SC_IER_RXNEIE   | /* RX has data */
                      SC_IER_OVRIE   | /* RX Overrun error */
                      SC_IER_FEIE | /* RX Frame error */
                      SC_IER_PEIE ) /* RX Parity error */
       ) {
      halInternalUart1RxIsr();
    }
    
    /* TX events */
    if ( interrupt & (SC_IER_TXEIE | /* TX has room */
                      SC_IER_IDLEIE ) /* TX idle (more room) */
       ) {
      halInternalUart1TxIsr();
    }


    interrupt = SC1_IT->ISR;
    interrupt &= SC1_IT->IER;
  }
}


SC1_IT->ISR = interrupt;这句不能清RXNE,因为数据还没有被读取,即使清了标志位,芯片又自动会打上标志位,所以应该放到读取DR之后。对于TXE标志位也是如此。
### STM32无线通信模块接口配置与使用教程 #### 1. Zigbee模块与STM32串口通信配置 Zigbee作为一种低功耗、短距离无线通信技术,在物联网设备中有广泛应用。为了使STM32微控制器能够与Zigbee模块进行有效的串口通信,需按照如下方法设置: - **硬件连接**:将Zigbee模块的数据发送端(TX)接到STM32的接收端(RX),反之亦然;同时确保两者共地(GND)[^1]。 - **初始化USART外设**:利用HAL函数`MX_USARTx_UART_Init()`来初始化指定编号的USART外设,其中参数应依据实际需求设定波特率、字长等属性。 ```c UART_HandleTypeDef huart1; void MX_USART1_UART_Init(void) { huart1.Instance = USART1; huart1.Init.BaudRate = 9600; // 设置波特率为9600bps huart1.Init.WordLength = UART_WORDLENGTH_8B; huart1.Init.StopBits = UART_STOPBITS_1; huart1.Init.Parity = UART_PARITY_NONE; huart1.Init.Mode = UART_MODE_TX_RX; HAL_UART_Init(&huart1); } ``` - **数据收发操作**:通过调用`HAL_UART_Transmit()`和`HAL_UART_Receive()`分别执行异步方式下的字符流发送与接收任务。 #### 2. STM32W108无线射频模块的编程实践 对于采用STM32W108作为核心处理器的情况,则可通过其内置的支持SPI/I²C/UART等多种协议类型的通用同步/异步收发器来进行开发工作。具体来说就是构建起PC端应用程序经由RS232转接线同该款单片机之间的桥梁,进而验证二者间能否正常交换信息包[^2]。 #### 3. LORA模块的基础调试流程 当涉及到更远距离的信息传递场景时,LORA无疑是一个理想的选择。初次接触这类器件的新手可以从最基础的操作做起——即先把一对LORA节点搭建好之后再尝试互相识别对方的存在与否以及简单消息往来。这期间可能要用到诸如Serial Monitor之类的工具辅助观察交互过程中的各项指标变化情况[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值