您的位置 首页 观点

STM32之串口通讯

实验目的:实现利用串口1不停的打印一个信息到电脑上,同时接收从串口发过来的数据,把发送过来的数据直接送回给电脑。实验平台:基于STM

试验意图:

完结运用串口1 不断的打印一个信息到电脑上,一起接纳从串口发过来的数据,把发送过来的数据直接送回给电脑。

试验渠道:

根据STM32F103C8T6的彩屏开发板

硬件接口:

留意:由于我的开发板上的串口和LED共用了PA9和PA10,所以在运用USART1时必须屏蔽LED,否则两者会相互影响而导致完结现象无法出现。

相关寄存器:

1,串口时钟使能。串口作为STM32 的一个外设,其时钟由外设时钟使能寄存器操控,这

里咱们运用的串口1 是在APB2ENR 寄存器的第14 位。

2,串口复位。串口1 的复位是经过装备APB2RSTR 寄存器的第14 位来完结的。。经过向该位写1来复位串口1,写0 结束复位。

3,串口波特率设置。每个串口都有一个自己独立的波特率寄存器USART_BRR

波特率的核算,STM32 的串口波特率核算公式如下:


上式中, 是给串口的时钟(PCLK1 用于USART2、3、4、5,PCLK2 用于USART1);USARTDIV 是一个无符号定点数。咱们只需得到USARTDIV 的值,就能够得到串口波特率寄存器USART1->BRR 的值。

4,串口操控。STM32 的每个串口都有3 个操控寄存器USART_CR1~3,串口的许多装备

都是经过这3 个寄存器来设置的

5,数据发送与接纳。STM32 的发送与接纳是经过数据寄存器USART_DR 来完结的,这是

一个双寄存器,包含了TDR 和RDR。

6,串口状况。串口的状况能够经过状况寄存器USART_SR 读取。

(注:具体的介绍运用请参阅ST公司的数据手册)

程序设计:

(注:自己的usart.c usart.h delay.c delay.h sys.c sys.h是引证网上一位网友收拾的)

usart.h

#ifndef __USART_H

#define __USART_H

#include

#include “stdio.h”

extern u8 USART_RX_BUF[64]; //接纳缓冲,最大63个字节.末字节为换行符

extern u8 USART_RX_STA; //接纳状况符号

//假如想串口中止接纳,请不要注释以下宏界说

#define EN_USART1_RX //使能串口1接纳

void uart_init(u32 pclk2,u32 bound);

#endif

usart.c

#include “sys.h”

#include “usart.h”

//参加以下代码,支撑printf函数,而不需求挑选use MicroLIB

#if 1

#pragma import(__use_no_semihosting)

//规范库需求的支撑函数

struct __FILE

{

int handle;

};

FILE __stdout;

//界说_sys_exit()以防止运用半主机形式

_sys_exit(int x)

{

x = x;

}

//重界说fputc函数

int fputc(int ch, FILE *f)

{

while((USART1->SR&0X40)==0);//循环发送,直到发送结束

USART1->DR = (u8) ch;

return ch;

}

#endif

//end

//////////////////////////////////////////////////////////////////

#ifdef EN_USART1_RX //假如使能了接纳

//串口1中止服务程序

//留意,读取USARTx->SR能防止不可思议的过错

u8 USART_RX_BUF[64]; //接纳缓冲,最大64个字节.

//接纳状况

//bit7,接纳完结标志

//bit6,接纳到0x0d

//bit5~0,接纳到的有效字节数目

u8 USART_RX_STA=0; //接纳状况符号

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/news/guandian/260584.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部