STM32F103C8T6实现串口通信

前言

本文是为了解学习STM32F103C8芯片,并用其实现串口通信。

一、 STM32F103C8T6是什么?

STM32F103C8T6是一款由意法半导体公司(ST)推出的基于Cortex-M3内核的32位微控制器,硬件采用LQFP48封装,属于ST公司微控制器中的STM32系列。

二、准备相应工作

1.下载安装相关程序

stm32cubeMX下载 提取码:1234
烧录程序 提取码:h2xc
串口小助手 提取码1234

2.安装HAL库

(1)打开安装好的STMCubeMX
在这里插入图片描述
(2)会跳出来一个选择型号界面 勾选上你要安装的HAL库, 点击“Install Now” 直到安装成功。(有弹窗报错一直点击ok重试,不行就重启电脑)
在这里插入图片描述

3.创建项目

在这里插入图片描述

(1)在part name里选择自己的芯片,这里是STM32F103C8T6

在这里插入图片描述
(2)点击system core,进入SYS,在debug下选择serial wire
在这里插入图片描述
(3)按以下方式配置
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
接下来就是点击相应的引脚设置输出寄存器了,就是output那一项,一共选了三个,是PA4,PB9,PC15
在这里插入图片描述
设置工程名字
在这里插入图片描述

进入 code generate界面,选择生成初始化.c/.h文件,后面点击generate code,选择open project,然后就到KEIL5了:
在这里插入图片描述

三 调试程序

项目创建成功后
在这里插入图片描述
打开main.c文件,滑倒主函数那一部分:
在whlie加入以下代码

 char data[]  = "hello,world!";
		HAL_UART_Transmit(&huart1, (uint8_t *)data, 15, 0xffff);
		HAL_Delay(1000);

如图
在这里插入图片描述

编译成功后可以生成相应的HEX文件,然后就能烧录程序了。
**如果这里报error :l6002u就要修改电脑里环境变量。**以下环境变量不能有中午
在这里插入图片描述

四 电路连接

1 电路连接

GND-G
3V3-3.3
RXD-A10
TXD-A9

2 烧录程序

在这里插入图片描述

在这里插入图片描述

串口显示

在这里插入图片描述

五 使用汇编完成

直接在keil5中创建文件

在main中输入以下代码,编译后也能生成HEX文件,之后在烧录程序,与上面相同。

;RCC寄存器地址映像             
RCC_BASE            EQU    0x40021000 
RCC_CR              EQU    (RCC_BASE + 0x00) 
RCC_CFGR            EQU    (RCC_BASE + 0x04) 
RCC_CIR             EQU    (RCC_BASE + 0x08) 
RCC_APB2RSTR        EQU    (RCC_BASE + 0x0C) 
RCC_APB1RSTR        EQU    (RCC_BASE + 0x10) 
RCC_AHBENR          EQU    (RCC_BASE + 0x14) 
RCC_APB2ENR         EQU    (RCC_BASE + 0x18) 
RCC_APB1ENR         EQU    (RCC_BASE + 0x1C) 
RCC_BDCR            EQU    (RCC_BASE + 0x20) 
RCC_CSR             EQU    (RCC_BASE + 0x24) 
                              
;AFIO寄存器地址映像            
AFIO_BASE           EQU    0x40010000 
AFIO_EVCR           EQU    (AFIO_BASE + 0x00) 
AFIO_MAPR           EQU    (AFIO_BASE + 0x04) 
AFIO_EXTICR1        EQU    (AFIO_BASE + 0x08) 
AFIO_EXTICR2        EQU    (AFIO_BASE + 0x0C
  • 3
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用STM32F103C8T6实现串口通信的步骤如下: 1. 配置GPIO口 首先需要配置GPIO口,将需要使用的USART的TX和RX引脚映射到相应的GPIO口上。 2. 配置USART 使用STM32的库函数,配置USART的波特率、数据位、停止位、校验位等参数,并使能USART。 3. 发送数据 使用USART的库函数,向USART发送数据,可以使用printf函数,也可以使用发送函数。 4. 接收数据 使用USART的库函数,从USART接收数据,可以使用中断方式或轮询方式。 以下是一个简单的示例代码: ```c #include "stm32f10x.h" #include <stdio.h> void USART1_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); USART_InitStructure.USART_BaudRate = 115200; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx; USART_Init(USART1, &USART_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); USART_Cmd(USART1, ENABLE); } void USART1_IRQHandler(void) { if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) { char c = USART_ReceiveData(USART1); USART_SendData(USART1, c); } } int main(void) { USART1_Init(); while (1) { printf("Hello World!\r\n"); } } ``` 该代码中,使用了USART1,并将其TX和RX引脚映射到PA9和PA10上,配置了波特率为115200,使用了8个数据位,1个停止位,无校验位。在USART1的中断服务函数中,将接收到的数据发送回去。在主函数中,使用printf函数向USART1发送数据,以及进入了一个无限循环。 需要注意的是,USART的配置需要根据实际需求进行修改。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值