stm32 USART1串口接收数据永远是00

配置GPIO端口时,将推挽输出

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT_PP;

改为复用推挽输出

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;

大抵因为stm32对UART1本身带有复用功能的原因

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好,关于stm32 usart2串口接收数据的问题,您可以参考以下步骤: 1. 首先,需要初始化USART2串口,配置波特率、数据位、停止位等参数。可以使用STM32 HAL库提供的函数进行初始化,例如: ``` USART_HandleTypeDef huart2; 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_RX; huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE; huart2.Init.OverSampling = UART_OVERSAMPLING_16; if (HAL_UART_Init(&huart2) != HAL_OK) { Error_Handler(); } ``` 2. 接着,需要开启USART2的中断,以便在接收到数据时触发中断服务程序。可以使用HAL库提供的函数进行中断配置,例如: ``` HAL_NVIC_SetPriority(USART2_IRQn, 0, 0); HAL_NVIC_EnableIRQ(USART2_IRQn); __HAL_UART_ENABLE_IT(&huart2, UART_IT_RXNE); ``` 其中,USART2_IRQn是USART2的中断号,UART_IT_RXNE表示接收到数据触发中断。 3. 在中断服务程序中,可以读取接收缓冲区中的数据,例如: ``` void USART2_IRQHandler(void) { uint32_t isrflags = READ_REG(huart2.Instance->SR); uint32_t cr1its = READ_REG(huart2.Instance->CR1); if (((isrflags & USART_SR_RXNE) != RESET) && ((cr1its & USART_CR1_RXNEIE) != RESET)) { uint8_t data = (uint8_t)(huart2.Instance->DR & 0x00FF); // 处理接收到的数据 } } ``` 其中,USART_SR_RXNE表示接收缓冲区非空标志位,USART_CR1_RXNEIE表示接收缓冲区非空中断使能位,huart2.Instance->DR表示USART2的数据寄存器。 以上就是关于stm32 usart2串口接收数据的基本步骤,希望对您有所帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值