登录/注册

stm32f103c8t6串口

stm32f103c8t6串口

更多

以下是针对 STM32F103C8T6 串口(UART)使用的中文详解,涵盖配置步骤、代码示例及关键注意事项:


一、硬件资源


二、配置步骤(以USART2为例)

1. 开启时钟

   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // GPIOA时钟
   RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); // USART2时钟

2. GPIO设置

   GPIO_InitTypeDef GPIO_InitStruct;
   // TX (PA2) 推挽复用输出
   GPIO_InitStruct.GPIO_Pin = GPIO_Pin_2;
   GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;  // 复用推挽
   GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_Init(GPIOA, &GPIO_InitStruct);

   // RX (PA3) 浮空输入
   GPIO_InitStruct.GPIO_Pin = GPIO_Pin_3;
   GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING; // 浮空输入
   GPIO_Init(GPIOA, &GPIO_InitStruct);

3. USART参数配置

   USART_InitTypeDef USART_InitStruct;
   USART_InitStruct.USART_BaudRate = 115200;      // 波特率
   USART_InitStruct.USART_WordLength = USART_WordLength_8b; // 8位数据
   USART_InitStruct.USART_StopBits = USART_StopBits_1;      // 1停止位
   USART_InitStruct.USART_Parity = USART_Parity_No;         // 无校验
   USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None; // 无流控
   USART_InitStruct.USART_Mode = USART_Mode_Tx | USART_Mode_Rx; // 使能收发
   USART_Init(USART2, &USART_InitStruct);

   USART_Cmd(USART2, ENABLE); // 使能USART2

三、收发数据函数

1. 发送数据

   void USART_SendByte(USART_TypeDef* USARTx, uint8_t data) {
     USART_SendData(USARTx, data);
     while (USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET); // 等待发送完成
   }

   // 发送字符串
   void USART_SendString(USART_TypeDef* USARTx, char *str) {
     while (*str) {
       USART_SendByte(USARTx, *str++);
     }
   }

2. 接收数据(轮询)

   uint8_t USART_ReceiveByte(USART_TypeDef* USARTx) {
     while (USART_GetFlagStatus(USARTx, USART_FLAG_RXNE) == RESET); // 等待数据
     return USART_ReceiveData(USARTx);
   }

3. 接收中断配置(推荐)

   // 使能USART2接收中断
   USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);

   // 配置NVIC(嵌套向量中断控制器)
   NVIC_InitTypeDef NVIC_InitStruct;
   NVIC_InitStruct.NVIC_IRQChannel = USART2_IRQn;
   NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;
   NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;
   NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
   NVIC_Init(&NVIC_InitStruct);

   // 中断服务函数
   void USART2_IRQHandler(void) {
     if (USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) {
       uint8_t data = USART_ReceiveData(USART2); // 读取数据
       // 处理接收到的数据(如回传)
       USART_SendData(USART2, data);
     }
   }

四、关键注意事项

  1. 时钟配置

    • 确保系统时钟已配置(如使用72MHz HCLK),波特率计算依赖于此。
    • 波特率计算公式:
      [ \text{USARTDIV} = \frac{\text{f}_{\text{PCLK}}}{16 \times \text{BaudRate}} ]
  2. 引脚重映射
    使用USART3或重映射USART1时,需开启AFIO时钟并重映射:

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
    GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE); // 重映射USART1到PB6/PB7
  3. 中断冲突
    多个串口同时使用时,注意分配不同的中断优先级。


五、完整示例代码(USART2轮询收发)

#include "stm32f10x.h"

int main(void) {
  // 初始化USART2(115200波特率)
  USART2_Init(115200);

  while(1) {
    if (USART_GetFlagStatus(USART2, USART_FLAG_RXNE)) {
      uint8_t data = USART_ReceiveData(USART2);
      USART_SendData(USART2, data); // 回显接收到的字节
    }
  }
}

// USART2初始化函数
void USART2_Init(uint32_t baudrate) {
  // 步骤1-3代码(见上文)
  // ...
}

六、调试技巧

  1. 接线检查
    TX → RX 交叉连接(开发板TX接USB转串口模块RX)。
  2. 波特率一致
    确保单片机与上位机(如串口助手)波特率、数据格式相同。
  3. 电压匹配
    使用3.3V电平的USB转TTL工具(避免5V烧毁芯片)。
  4. 驱动安装
    电脑需安装串口芯片驱动(如CH340、CP2102)。

通过以上步骤即可实现STM32F103C8T6的串口通信。实际开发推荐使用中断或DMA提高效率!

ch32f103c8t6stm32f103c8t6的区别

ch32f103c8t6与stm32f103c8t6的区别 STM32F103C8T6是一款32位微处理器,属于

2023-08-22 16:05:41

STM32F103C8T6串口发送字符的过程是怎样的?

STM32F103C8T6串口发送字符串的过程是怎样的?

2022-02-21 06:59:21

STM32f103c8t6矩阵键盘程序(串口通信)资料汇总

STM32f103c8t6矩阵键盘程序(串口通信)资料汇总

资料下载 jf_38761833 2021-12-08 17:44:29

STM32F103C8t6程序下载

STM32F103C8t6程序下载

资料下载 golabs 2021-11-24 18:21:06

STM32F103C8T6原理图

STM32F103C8T6原理图免费下载。

资料下载 bye陈发树 2021-06-02 10:01:10

STM32F103C8T6核心板资料汇总

STM32F103C8T6核心板资料汇总

资料下载 jf_42320578 2021-05-20 15:31:18

STM32F103C8T6单片机原理图下载

STM32F103C8T6单片机原理图下载

资料下载 ah此生不换 2021-04-12 09:36:07

STM32F103C8T6串口1程序编写过程中出现哪些问题

STM32F103C8T6串口1程序编写过程中出现哪些问题?STM32F103C8T6

2021-12-14 06:19:27

STM32F103C8T6串口UART的sh实验代码该怎样去实现呢

STM32F103C8T6串口UART的sh实验代码该怎样去实现呢?

2021-12-14 06:01:10

如何实现STM32F103C8T6串口通信?

如何实现STM32F103C8T6串口通信?

2021-12-07 07:22:23

STM32F103C8T6串口IAP为什么会不成功呢

STM32F103C8T6串口IAP为什么会不成功呢?怎么去解决这个问题呢?

2021-12-06 07:28:13

如何实现stm32f103c8t6串口通信?

如何实现stm32f103c8t6串口通信?

2021-11-26 06:03:30

深圳高价回收STM32F103C8T6 收购STM32F103C8T6

大量收购工厂库存ST电子芯片STM32F103C8T6 ,实力收购工厂库存ST芯片STM32F103C8T6 ,回收价格高!!财富热线 帝欧电子 赵先生 ***同步微信 )QQ:879821252

2021-08-30 16:10:30

STM32F103C8T6串口介绍

1 STM32F103C8T6串口介绍STM32F103C8T6有三个串口

2021-08-05 07:08:08
7天热门专题 换一换
相关标签