访问电脑版页面

导航:老古开发网手机版STM32单片机STM32F103单片机

STM32F103的简易串口驱动(查询方式)

导读:
关键字:

 STM32F103的简易串口驱动(查询方式)

对于各个模块的学习,开始通常是只使用最简单的功能。这里将给出一个STM32F103的最基本的串口收、发驱动。要使用串口,就需要对串口的波特率、数据格式等进行设置。这里给出的例子是使用的USART1,它的时钟是连接在APB2上的,在计算波特率时应该使用APB2的输出时钟。另外,使用查询方式的话,还需要禁止掉串口的相关中断,以防止程序跑飞。由于STM32F103的串口引脚是跟普通IO口复用的,所以在使用之前,一定要记得初始化对应的IO口,选择为相应的第二功能,否则串口将无法正常工作。

首先对照STM32F103的数据手册,将相关寄存器的定义写好,放在USART.h头文件中。然后增加对串口的初始化、串口读写操作的函数即可。本测试程序功能很简单,开机时通过串口发送一个"System start..."的字符串,然后等待串口接收数据。当接收到数据后,将数据通过串口返回,然后流水灯工作一次,又继续等待接收数据。

本测试程序设置的波特率为9600,由宏BIT_RATE定义,然后在程序中计算需要设置的分频值。小数部分中的值为实际的小数部分乘以16。

部分代码如下:

#include "USART.H"

#include "gpio.h"

#define BIT_RATE 9600

#define USART_CLK 72000000UL

//串口初始化,波特率为9600

void Usart1Init(void)

{

 

 //设置波特率分频器

 pbUSART1_BRR->DIV_ManTIssa=(USART_CLK/16/BIT_RATE);

 pbUSART1_BRR->DIV_FracTIon=(USART_CLK/BIT_RATE);

 //使能串口1

 pbUSART1_CR1->UE=1;

 //0: 1 Start bit, 8 Data bits, n Stop bit

 pbUSART1_CR1->M=0;

 //禁止奇偶校验

 pbUSART1_CR1->PCE=0;

 //禁止串口1的所有中断

 pbUSART1_CR1->PEIE=0;

 pbUSART1_CR1->TXEIE=0;

 pbUSART1_CR1->TCIE=0;

 pbUSART1_CR1->RXNEIE=0;

 pbUSART1_CR1->IDLEIE=0;

 //使能串口1发送

 pbUSART1_CR1->TE=1;

 //使能串口1接收

 pbUSART1_CR1->RE=1;

 //1位停止位

 pbUSART1_CR2->STOP=0;

 //禁止LIN Break DetecTIon Interrupt

 pbUSART1_CR2->LBDIE=0;

 pbUSART1_CR3->CTSIE=0;

 pbUSART1_CR3->CTSE=0;

 pbUSART1_CR3->RTSE=0;

 pbUSART1_CR3->DMAT=0;

 pbUSART1_CR3->DMAR=0;

 pbUSART1_CR3->SCEN=0;

 pbUSART1_CR3->NACK=0;

 pbUSART1_CR3->HDSEL=0;

 pbUSART1_CR3->IRLP=0;

 pbUSART1_CR3->IREN=0;

 pbUSART1_CR3->EIE=0;

 //TXD引脚设置(连接在PA9上)

 GPIOA_MODE9=3; //50MHz 输出模式

 GPIOA_CNF9=2; //第二功能推挽输出模式

 //RXD引脚设置(连接在PA10上)

 GPIOA_MODE10=0; //输入模式

 GPIOA_CNF10=1; //高阻输入

}

 

//从串口1等待1字节数据

unsigned char Usart1GetChar(void)

{

 while(!pbUSART1_SR->RXNE);

 return pbUSART1_DR->DR;

}

//往串口1发送1字节

void Usart1PutChar(unsigned char Value)

{

 while(!pbUSART1_SR->TXE);

 pbUSART1_DR->DR=Value;

}

 

//往串口1发送一个字符串

void Usart1PutString(unsigned char *pString)

{

 unsigned int i;

 i=0;

 while(pString[i])

 {

 Usart1PutChar(pString[i]);

 i++;

 }

}

 

 

 

 

 

STM32/STM8

意法半导体/ST/STM

来源:网络整理   作者:佚名  2017/12/4 14:55:00
栏目: [ STM32F103单片机]

相关阅读

STM32F103试用体验:LCD显示与DHT11测量实验

STM32F103学习笔记 (十) TFTLCD 显示

STM32F103外部晶振由8M变为12M

基于STM32F103ZE的USART2 端口时钟

STM32F103利用模拟I2C驱动ADS1115

STM32F103系列单片机中的定时器工作原理解析

STM32F103 开发板试用体验:超声波测距功能的实现

嵌入式微处理器STM32F103有什么特点和应用?怎样去开发?

利用stm32f103的TIM2实现精确延时

STM32F103学习笔记 (八) PWM输出

STM32F103C8T6 ULN2003步进电机驱动代码

stm32F103单片机无源晶振不起振排除问题

STM32F103试用体验(四):硬件原理与机壳组装

STM32F103ZET6 之 通用定时器单脉冲模式实验

STM32F103试用体验:水共震准备材料中的过程

基于单片机Stm32f103 DAC电流输出解决方案

stm32f103zet6如何识别flash大小

基于STM32F103的USB数据采集模块的设计

100脚的STM32F103VE单片机通过FSMC接口读写DS12C887时钟芯片中的寄存器

STm32F103ZET6红牛开发板原理图