STM32F103C8T6 串口2 标准库中断接收代码
时间: 2024-09-16 10:04:51 浏览: 62
STM32F103C8T6的串口2(USART2)通常通过配置其中断机制来实现实时数据接收。以下是一个基本的示例代码片段,展示如何设置USART2的RXNE(接收完成)中断并处理接收到的数据:
```c
#include "stm32f1xx_hal.h"
// 初始化GPIO和USART2
void USART2_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
// 配置TX/RX pins (假设PA9和PA10用于USART2)
GPIO_InitStruct.Pin = GPIO_PIN_9 | GPIO_PIN_10;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF7_USART2; // 对于F103系列,USART2的AF7映射到GPIOA
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
// 配置USART2
USART_HandleTypeDef usart2Handle;
usart2Handle.Instance = USART2;
usart2Handle.Init.BaudRate = 9600; // 设置波特率
usart2Handle.Init.WordLength = UART_WORDLENGTH_8B10B;
usart2Handle.Init.StopBits = UART_STOPBITS_1;
usart2Handle.Init.Parity = UART_PARITY_NONE;
usart2Handle.Init.HardwareFlowControl = UART_HWCONTROL_NONE;
usart2Handle.Init.Mode = UART_MODE_TX_RX;
HAL_UART_Init(&usart2Handle);
}
// USART2 RXNE中断服务函数
void USART2_IRQHandler(void)
{
if(__HAL_UART_GET_FLAG(&usart2Handle, USART_FLAG_RXNE) != RESET)
{
uint8_t data = HAL_UART接收一字符; // 从接收缓冲区获取数据
// 数据处理...
// 清除RXNE标志以便下次接收
HAL_UART_ClearFlag(&usart2Handle, USART_FLAG_RXNE);
}
}
int main(void)
{
USART2_Init();
// 开启USART2接收中断
__HAL_NVIC_EnableIRQ(USART2_IRQn); // NVIC中断使能
while (1)
{
// 主程序循环
}
return 0;
}
```
阅读全文