STM32学习笔记(7):USART串口的使用

合集下载

【STM32H7教程】第29章STM32H7的USART串口基础知识和HAL库API

【STM32H7教程】第29章STM32H7的USART串口基础知识和HAL库API

【STM32H7教程】第29章STM32H7的USART串⼝基础知识和HAL库API第29章 STM32H7的USART串⼝基础知识和HAL库API本章节为⼤家讲解USART(Universal synchronous asynchronous receiver transmitter,通⽤同步异步收发器)的基础知识和对应的HAL库API。

相⽐之前的F1和F4系列,增加了不少新特性。

29.1 初学者重要提⽰29.2 串⼝基础知识29.3 串⼝的HAL库⽤法29.4 源⽂件stm32h7xx_hal_uart.c29.5 总结29.1 初学者重要提⽰1. 学习串⼝外设推荐从硬件框图开始了解基本的功能特性,然后逐步深⼊了解各种特性,这种⽅式⽅便记忆和以后查阅。

⽽串⼝的通信学习,推荐看时序图。

2. STM32H7的串⼝⽐STM32F4和F1的串⼝⽀持了更多⾼级特性。

⽐如超时接收检测、⾃适应波特率、TX和RX引脚互换等功能。

3. 部分中断标志是可以通过操作发送数据寄存器TDR或者接收数据寄存器RDR实现清除,这点要特别注意,详情看本章29.3.4⼩节。

4. 初次使⽤USART,还是有不少注意事项的,详情看本章29.3.3⼩节和29.4.1⼩节。

29.2 串⼝基础知识USART的全称是Universal synchronous asynchronous receiver transmitter,中⽂意思是通⽤同步异步收发器。

我们经常使⽤串⼝是异步串⼝,简称UART。

29.2.1 串⼝的硬件框图认识⼀个外设,最好的⽅式就是看它的框图,⽅便我们快速的了解串⼝的基本功能,然后再看⼿册了解细节。

通过这个框图,我们可以得到如下信息:IRQ Interface中断接⼝⽤于实现中断⽅式的串⼝唤醒usart_wkup和串⼝的相关中断usart_it。

DMA Interface DMA接⼝实现串⼝发送usart_tx_dma和接收usart_rx_dma的DMA⽅式。

stm32 的串口通信操作方法

stm32 的串口通信操作方法

一、概述在嵌入式系统开发中,串口通信是非常常见且重要的一种通信方式。

而对于使用STM32系列单片机的开发者来说,了解和掌握STM32的串口通信操作方法显得尤为重要。

本文将详细介绍在STM32上进行串口通信的方法和步骤,帮助开发者更好地应用串口通信功能。

二、认识STM32的串口通信1. 串口通信的基本原理串口通信是一种通过串行接口进行数据传输的通信方式。

在STM32中,串口通信可以通过UART、USART等外设来实现。

串口通信的基本原理是将数据串行发送和接收,通过设定波特率等参数来实现数据传输。

2. STM32的串口通信外设STM32系列单片机中,常用的串口通信外设有UART和USART。

它们可以通过配置相关寄存器和引脚,实现串口通信的功能。

开发者需要了解这些外设的功能和特点,才能正确地进行串口通信的操作。

三、配置串口通信的硬件1. 硬件连接在进行STM32的串口通信前,需要先连接好串口通信的硬件,包括连接好串口通信的引脚,以及通过适当的线序连接到外部设备或另一块开发板上。

2. 引脚复用设置在STM32中,很多引脚都具有多种功能,可以通过引脚复用功能来设置为串口通信功能。

开发者需要根据具体的芯片型号和引脚图来正确地设置引脚复用。

3. 时钟配置串口通信外设需要时钟信号来进行数据的同步和传输。

需要在STM32的时钟配置中确保串口通信外设的时钟信号正常。

四、配置串口通信的软件1. 寄存器配置通过配置相关的寄存器,来设置串口通信的参数,如波特率、数据位、停止位、校验位等。

不同的串口通信外设可能有不同的寄存器和参数设置方式,开发者需要根据具体的外设手册来完成寄存器的配置。

2. 中断或轮询方式在STM32中,可以通过中断或者轮询的方式来进行串口通信的数据传输。

中断方式通常可以提高系统的响应速度,而轮询方式则更加简单直接。

开发者可以根据需求选择合适的方式来进行串口通信操作。

3. 数据收发操作通过读写相应的寄存器,实现串口通信数据的发送和接收。

STM32UART详细使用说明整理

STM32UART详细使用说明整理

STM32UART详细使用说明整理1.引脚和时钟配置:首先,需要配置UART的引脚和时钟。

在STM32的引脚复用配置中选择UART功能,并配置GPIO的工作模式和引脚配置,使其与UART通信引脚相对应。

然后,配置UART的时钟源和时钟分频系数。

时钟源可以选择为系统时钟或外部时钟源。

2.初始化和配置:使用STM32提供的库函数,初始化UART控制寄存器。

配置波特率、数据位数、停止位数、奇偶校验位以及流控制等参数。

可以使用HAL库函数来完成配置,例如:```c/*初始化UART控制寄存器*/UART_HandleTypeDef huart;huart.Instance = USARTx;huart.Init.WordLength = UART_WORDLENGTH_8B;huart.Init.StopBits = UART_STOPBITS_1;huart.Init.Parity = UART_PARITY_NONE;huart.Init.Mode = UART_MODE_TX_RX;huart.Init.HwFlowCtl = UART_HWCONTROL_NONE;huart.Init.OverSampling = UART_OVERSAMPLING_16;HAL_UART_Init(&huart);```3.数据发送:使用HAL库函数发送数据。

可以选择使用轮询方式还是中断方式发送数据。

轮询方式:```cuint8_t data[] = "Hello, World!";HAL_UART_Transmit(&huart, data, sizeof(data), HAL_MAX_DELAY);```中断方式:```cuint8_t data[] = "Hello, World!";HAL_UART_Transmit_IT(&huart, data, sizeof(data));```需要在发送数据之前开启UART的发送中断,并处理发送完成中断回调函数。

USART模块寄存器使用说明

USART模块寄存器使用说明

USART模块寄存器使用说明USART(Universal Synchronous/AsynchronousReceiver/Transmitter)是通用同步/异步收发器,是一种常用的串行通信接口模块。

在使用USART模块之前,需要配置一些寄存器来完成通信的参数设置。

ART控制寄存器(USART_CRx):用于配置发送和接收的参数。

常用的配置包括:- 使能发送和接收功能:通过设置 TE(Transmitter Enable)和 RE (Receiver Enable)位来使能发送和接收功能。

- 配置数据位数:通过设置 M(Mantissa)位来选择发送和接收的数据位数。

- 配置停止位:通过设置 STOP(Stop Bits)位来选择发送和接收的停止位数。

- 配置奇偶校验位:通过设置 PCE(Parity Control Enable)位和PS(Parity Selection)位来选择发送和接收的奇偶校验方式。

- 配置同步/异步模式:通过设置 SYNC(Synchronous mode enable)位来选择同步(同步模式)或异步(异步模式)通信。

ART数据寄存器(USART_DR):用于发送和接收数据。

写入该寄存器的数据将被发送,读取该寄存器可以获取接收到的数据。

ART状态寄存器(USART_SR):用于获取USART模块的状态信息。

常用的状态位包括:- TXE(Transmit Data Register Empty):发送数据寄存器为空。

- RXNE(Read Data Register Not Empty):接收数据寄存器非空。

- FE(Framing Error):帧错误。

- ORE(Overrun Error):溢出错误。

- NE(Noise Error):噪声错误。

ART波特率寄存器(USART_BRR):用于配置通信的波特率。

波特率=时钟频率/(16*USARTDIV)。

ART控制寄存器2(USART_CR2)和寄存器3(USART_CR3):用于配置流控制、硬件流控制、DMA接口等其他功能。

关于STM32的USART的使用(一)--- 初始化过程

关于STM32的USART的使用(一)--- 初始化过程
GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//浮空输入
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化PA.10
//NVIC中断向量配置
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
= ENABLE;//IRQ通道使能
NVIC_Init(&NVIC_InitStructure);//根据上面设置的参数初始化NVIC寄存器
//USART初始化设置
USART_ART_BaudRate=bound;//波特率为
9600;USART_ART_WordLength=USART_WordLength_8b;//字长
voiduart_init(u32 bound)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPI
OA,ENABLE);//使能USART1和GPIOA时钟USART_DeInit(USART1);//复位
串口1(各参数置为缺省值)
//USART1_TX(发送数据)PA.9引脚
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

STM32F030_USART详细配置说明_stm32f030串口

STM32F030_USART详细配置说明_stm32f030串口

STM32F030_USART详细配置说明_stm32f030串口串口是我们在编程时最经常用的问题,通常用它来发送和接收数据,同时它还有另外一个功能——检测程序是否正确,stm32f030系类单片机自然而然少不了串口,本文主要介绍STM32F030_USART的几个常用的简单应用和它的功能配置。

1、概述通用同步异步收发器(USART)提供了一个灵活的方式,使 MCU 可以与外部设备通过工业标准 NRZ 的形式实现全双工异步串行数据通讯。

USART 可以使用分数波特率发生器,提供了超宽的波特率设置范围。

可以使用DMA 实现多缓冲区设置,从而能够支持高速数据通讯•全双工,异步通讯•可配置的 16 倍或 8 倍过采样方法提供速度和时钟容忍度间的灵活选择•小数波特率发生器•自动波特率检测•单线半双工通讯•停止位个数可设置 - 支持 1 个或 2 个停止位•十四个中断源和中断标志•- CTS 切换•- LIN 断开检测•-发送数据寄存器空•-发送完成•-接收数据寄存器满•-检测到线路空闲•-溢出错误•-帧错误•-噪声错误•-奇偶错误•-地址 / 字符匹配•-接收超时中断•-块结束中断•-从 Stop 模式唤醒•校验控制:•-发送奇偶校验位•-接收数据的奇偶检查2、准备工作1.认真阅读STM32F030x数据手册2.了解USART的运行原理3.查看STM32F030开发板原理图和封装图4.电脑装有keil等编译软件3、寄存器说明控制寄存器 1(USART_CR1)控制寄存器 2(USART_CR2)控制寄存器 3(USART_CR3)波特率寄存器( USART_BRR)保护时间和预分频器寄存器( USART_GTPR)中断和状态寄存器(USART_ISR)中断标志清除寄存器( USART_ICR)数据接收寄存器( USART_RDR)数据发送寄存器( USART_TDR)4、USART配置ART原理图ART代码分析3.①USART初始化void Usart_Init(uint32_t BaudRate){ USART_InitTypeDef USART_InitStruct; GPIO_InitTypeDef GPIO_InitStruct; RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA,ENABLE); /* PA9-TX-推挽复用PA10-RX-浮空输入/上拉输入*/ GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_1);GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_1); GPIO_InitStruct.GPIO_Pin=GPIO_Pin_9;GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF;GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStruct);GPIO_InitStruct.GPIO_Pin=GPIO_Pin_10;GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF;GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_UP;GPIO_Init(GPIOA,&GPIO_InitStruct); /*USART基本配置*/ USART_ART_BaudRate=BaudRate;USART_ART_HardwareFlowControl=USART_Hardwa reFlowControl_None;USART_ART_Mode=USART_Mode_Tx|USART_Mode_ Rx; USART_ART_Parity=USART_Parity_No; USART_ART_StopBits=USART_StopBits_1;USART_ART_WordLength=USART_WordLength_8b; USART_Init(USART1,&USART_InitStruct); /*使能接收中断*/ NVIC_Config(USART1_IRQn); USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); USART_Cmd(USART1,ENABLE);}②USART发送数据void USART1_SendBuf(uint8_t *pBuf, uint32_tu32Len){ while(u32Len--) { /*判断发送缓冲区是否为空*/ while(!USART_GetFlagStatus(USART1,USART_FLAG_TXE)); USART_SendData(USART1,*pBuf++); }}③USART接收数据uint8_t USART1_ReciverBuf(void){ /*判断接收缓冲区是否为非空*/ while(!USART_GetFlagStatus(USART1,USART_FLAG_RXNE)); return USART_ReceiveData(USART1);}3 . printf函数重映射int fputc(int ch, FILE*f){ USART_SendData(USART1,(uint8_t)ch); while (!USART_GetFlagStatus(USART1, USART_FLAG_TXE)); return (ch);}5、总结在进行USART的printf函数的使用时,一定要记得将微库打开:点击keil工具栏的小魔术棒符号,进入Target配置,勾选Use MicroLib。

stm32跑RT-thread之串口操作简介

stm32跑RT-thread之串口操作简介

#define SAMPLE_UART_NAME
"uart2" /* 串口设备名称 */
static rt_device_t serial;
/* 串口设备句柄 */
/* 查找串口设备 */
serial = rt_device_find(SAMPLE_UART_NAME);
/* 以 DMA 接收及轮询发送模式打开串口设备 */
460800
#define BAUD_RATE_921600
921600
#define BAUD_RATE_2000000
2000000
#define BAUD_RATE_3000000 /* 数据位可取值 */
3000000
#define DATA_BITS_5
5
#define DATA_BITS_6
要此位也可以。

停止位: 表示一帧数据的结束。电平逻辑为 “1”。

波特率:串口通信时的速率,它用单位时间内传输的二进制代码的有效
位(bit)数来表示,其单位为每秒比特数 bit/s(bps)。常见的波特率值有
4800、9600、14400、38400、115200 等,数值越大数据传输的越快,波特率为
#define RT_DEVICE_FLAG_STREAM
0x040 /* 流模式
*/
/* 接收模式参数 */
#define RT_DEVICE_FLAG_INT_RX
0x100 /* 中断接收模式 */
#define RT_DEVICE_FLAG_DMA_RX /* 发送模式参数 */ #define RT_DEVICE_FLAG_INT_TX
UART 设备 UART 简介

STM32HAL库UART串口读写功能笔记

STM32HAL库UART串口读写功能笔记

STM32HAL库UART串⼝读写功能笔记串⼝发送功能:uint8_t TxData[10]= "01234abcde";HAL_UART_Transmit(&huart2,TxData,10,0xffff);//把TxData的内容通过uart2发送出去,长度是10,timeout的时间是最⼤值0xffff串⼝接收功能1:uint8_t value='F';HAL_UART_Receive(&huart2,(uint8_t *)&value,1,1000);//在这个语句停留1000ms内等待接收1个字节数据,把数据存放在value中串⼝接收功能2:HAL_UART_Receive_IT(&huart2,(uint8_t *)&value,1);//程序不会在这个语句停留,直接会按照中断⽅式把接收数据存放在value中,但是这个语句只能使能⼀次串⼝中断。

所以要在中断服务函数或者回调函数中重新使能串⼝接收功能3:if(HAL_UART_Receive_IT(&huart2,(uint8_t *)&value,1) != HAL_OK){ //这⼀句写在main函数的while(1)上⾯。

⽤于启动程序启动⼀次中断接收HAL_UART_Transmit(&huart2, (uint8_t *)&"ERROR\r\n",7,10);while(1);}void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle){HAL_UART_Transmit(&huart2, (uint8_t *)&"\r\ninto HAL_UART_RxCpltCallback\r\n",32,0xffff); //验证进⼊这个函数了HAL_UART_Transmit(&huart2,(uint8_t *)&value,1,0xffff); //把接收到的数据通过串⼝发送出去HAL_UART_Receive_IT(&huart2,(uint8_t *)&value,1); //重新打开串⼝中断}串⼝DMA发送DMA的TX要这样设置uint8_t txData[] = {"HelloWorld\r\n"};HAL_UART_Transmit_DMA(&huart2,txData,sizeof(txData));//可以通过DMA把数据发出去DMA接收if(HAL_UART_Receive_DMA(&huart2, (uint8_t *)rxData, sizeof(rxData)-1) != HAL_OK)//main函数while(1)前,启动⼀次DMA接收{Error_Handler();}串⼝回调函数:void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle){uint8_t temp[] = {"\r\nin Callback\r\n"};HAL_UART_Transmit_DMA(&huart2,temp,sizeof(temp)-1);//可以通过DMA把数据发出去HAL_UART_Receive_DMA(&huart2, (uint8_t *)rxData, sizeof(rxData)-1); //重新使能接收}main函数while(1)中不断输出rxData值HAL_UART_Transmit_DMA(&huart2,rxData,sizeof(rxData)-1);//可以通过DMA把数据发出去写在前⾯ 最近需要使⽤⼀款STM32L4系列的芯⽚进⾏开发,需要学习使⽤HAL库。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

STM32学习笔记(7):USART串口的使用2011年4月19日USART串口通信1.串口的基本概念在STM32的参考手册中,串口被描述成通用同步异步收发器(USART),它提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换。

USART利用分数波特率发生器提供宽范围的波特率选择。

它支持同步单向通信和半双工单线通信,也支持LIN(局部互联网),智能卡协议和IrDA(红外数据组织)SIR ENDEC规范,以及调制解调器(CTS/RTS)操作。

它还允许多处理器通信。

还可以使用DMA方式,实现高速数据通信。

USART通过3个引脚与其他设备连接在一起,任何USART双向通信至少需要2个引脚:接受数据输入(RX)和发送数据输出(TX)。

RX:接受数据串行输入。

通过过采样技术来区别数据和噪音,从而恢复数据。

TX:发送数据输出。

当发送器被禁止时,输出引脚恢复到它的I/O端口配置。

当发送器被激活,并且不发送数据时,TX引脚处处于高电平。

在单线和智能卡模式里,此I/O口被同时用于数据的发送和接收。

2.串口的如何工作的一般有两种方式:查询和中断。

(1)查询:串口程序不断地循环查询,看看当前有没有数据要它传送。

如果有,就帮助传送(可以从PC到STM32板子,也可以从STM32板子到PC)。

(2)中断:平时串口只要打开中断即可。

如果发现有一个中断来,则意味着要它帮助传输数据——它就马上进行数据的传送。

同样,可以从PC到STM3板子,也可以从STM32板子到PC。

3.串口的硬件连接我用的奋斗STM32 V3开发板拥有二路RS-232接口,CPU的PA9-US1-TX (P68)、PA10-US1-RX(P69)、PA9-US2-TX(P25)、PA10-US2-RX(P26)通过MAX3232实现两路RS-232接口,分别连接在XS5和XS17接口上。

USART1在系统存储区启动模式下,将通过该口通过PC对板上的CPU进行ISP,该口也可作为普通串口功能使用,JP3,JP4的短路冒拔去,将断开第二路的RS232通信,仅作为TTL通信通道。

4.编程实例我们要对串口进行操作,首先要将STM32的串口和CPU进行连接。

在Windows操作系统中,有一个自带的系统软件叫“超级终端”。

VISTA以上的操作系统去掉了这个软件,不过可以从XP的系统中,复制“hypertrm.dll”和“hypertrm.exe”到“windows/system32”文件夹下,然后双击运行hypertrm.exe,就可以看见超级终端的运行界面了。

运行超级终端以后,会弹出“连接描述”,输入名称和选择图标,这个地方随便写个什么名称都可以。

然后弹出“连接到”设置,在“连接时使用”选择你自己PC和STM32连接的COMx,如果不知道是哪个COM口的话,可以在PC 的设备管理器中找到。

在选择好COM口之后,会弹出一个“属性”对话框,在“位/秒”选择和你STM32中设置的波特率一致就好,数据位也是按照STM32的设置来选择,奇偶校验选择无,停止位选择1,数据流控制选择无。

注意,以上的选项都必须和STM32中的串口设置相匹配,要不然可能会出现一些未知错误。

配置好超级终端之后,我们便可以开始对STM32进行编程了。

编程一般按照如下步骤进行:(1)RCC配置;(2)GPIO配置;(3)USART配置;(4)NVIC配置;(5)发送/接收数据。

在RCC配置中,我们除了常规的时钟设置以外,要记得打开USART相对应的IO口时钟,USART时钟,还有管脚功能复用时钟。

在GPIO配置中,将发送端的管脚配置为复用推挽输出,将接收端的管脚配置为浮空输入。

在USART的配置中,通过USART_InitTypeDef结构体对USART进行初始化操作,按照自己所需的功能配置好就可以了。

注意,在超级终端的设置中,需要和这个里面的配置相对应。

由于我是采用中断接收数据的方式,所以记得在USART的配置中药打开串口的中断,同时最后还要打开串口。

在NVIC的配置中,主要是USART1_IRQChannel的配置,和以前的笔记中讲述的中断配置类似,不会配置的可以参考以前的笔记。

全部配置好之后就可以开始发送/接收数据了。

发送数据用USART_SendData()函数,接收数据用USART_ReceiveData()函数。

具体的函数功能可以参考固件库的参考文件。

根据USART的配置,在发送和接收时,都是采用的8bits一帧来进行的,因此,在发送的时候,先开辟一个缓存区,将需要发送的数据送入缓存区,然后再将缓存区中的数据发送出去,在接收的时候,同样也是先接收到缓存区中,然后再进行相应的操作。

注意在对数据进行发送和接收的时候,要检查USART的状态,只有等到数据发送或接收完毕之后才能进行下一帧数据的发送或接收。

采用USART_GetFlagStatus()函数。

同时还要注意的是,在发送数据的最开始,需要清除一下USART的标志位,否则,第1位数据会丢失。

因为在硬件复位之后,USART的状态位TC是置位的。

当包含有数据的一帧发送完成之后,由硬件将该位置位。

只要当USART的状态位TC是置位的时候,就可以进行数据的发送。

然后TC位的置零则是通过软件序列来清除的,具体的步骤是“先读USART_SR,然后写入USART_DR”,只有这样才能够清除标志位TC,但是在发送第一帧数据的时候,并没有进行读USART_SR的操作,而是直接进行写操作,因此TC标志位并没有清空,那么,当发送第一帧数据,然后用USART_GetFlagStatus()检测状态时返回的是已经发送完毕(因为TC位是置1的),所以程序会马上发送下一帧数据,那么这样,第一帧数据就被第二帧数据给覆盖了,所以看不到第一帧数据的发送。

按照上面的方法编程后,我们便可以在超级终端上查看串口通信的具体状态了。

我的这个例程,在硬件复位以后,可以马上在超级终端上看见“Welcome to my STM32! Please press any key!”字样,然后如果在超级终端中通过PC机键盘按下相应的键,则这个键会发送到STM32中,并且马上返回到PC机的超级终端上,因此可以马上从超级终端的页面中看到按下的相应的键。

5.程序源代码#include "stm32f10x_lib.h"FlagStatus RX_status;void RCC_cfg();void GPIO_cfg();void USART_cfg();void NVIC_cfg();int main(){int i;unsigned char TxBuf1[] = "Welcome to my STM32! Please press any key!";RCC_cfg();GPIO_cfg();NVIC_cfg();USART_cfg();//清除标志位,否则第1位数据会丢失USART_ClearFlag(USART1,USART_FLAG_TC);//发送数据//PB5的作用是显示正在发送数据//当有数据在发送的时候,PB5会亮for( i=0;TxBuf1[i]!='\0';i++){USART_SendData(USART1,TxBuf1[i]);GPIO_SetBits(GPIOB,GPIO_Pin_5);//等待数据发送完毕while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);GPIO_ResetBits(GPIOB,GPIO_Pin_5);}while(1);}//RCC时钟配置void RCC_cfg(){//定义错误状态变量ErrorStatus HSEStartUpStatus;//将RCC寄存器重新设置为默认值RCC_DeInit();//打开外部高速时钟晶振RCC_HSEConfig(RCC_HSE_ON);//等待外部高速时钟晶振工作HSEStartUpStatus = RCC_WaitForHSEStartUp();if(HSEStartUpStatus == SUCCESS){//设置AHB时钟(HCLK)为系统时钟RCC_HCLKConfig(RCC_SYSCLK_Div1);//设置高速AHB时钟(APB2)为HCLK时钟RCC_PCLK2Config(RCC_HCLK_Div1);//设置低速AHB时钟(APB1)为HCLK的2分频RCC_PCLK1Config(RCC_HCLK_Div2);//设置FLASH代码延时FLASH_SetLatency(FLASH_Latency_2);//使能预取指缓存FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);//设置PLL时钟,为HSE的9倍频8MHz * 9 = 72MHzRCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);//使能PLLRCC_PLLCmd(ENABLE);//等待PLL准备就绪while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);//设置PLL为系统时钟源RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//判断PLL是否是系统时钟while(RCC_GetSYSCLKSource() != 0x08);}//打开GPIO时钟,复用功能,串口1的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO |RCC_APB2Periph_USART1, ENABLE);}//IO口配置void GPIO_cfg(){GPIO_InitTypeDef GPIO_InitStructure;//PA9作为US1的TX端,打开复用,负责发送数据GPIO_StructInit(&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_Init(GPIOA , &GPIO_InitStructure);//PA10作为US1的RX端,负责接收数据GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA, &GPIO_InitStructure);//LED显示串口正在发送/接收数据GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIOB, &GPIO_InitStructure);}//串口初始化void USART_cfg(){USART_InitTypeDef USART_InitStructure;//将结构体设置为缺省状态USART_StructInit(&USART_InitStructure);//波特率设置为115200USART_ART_BaudRate = 115200;//一帧数据的宽度设置为8bitsUSART_ART_WordLength = USART_WordLength_8b;//在帧结尾传输1个停止位USART_ART_StopBits = USART_StopBits_1;//奇偶失能模式,无奇偶校验USART_ART_Parity = USART_Parity_No;//发送/接收使能USART_ART_Mode = USART_Mode_Rx |USART_Mode_Tx;//硬件流控制失能USART_ART_HardwareFlowControl =USART_HardwareFlowControl_None;//设置串口1USART_Init(USART1, &USART_InitStructure);//打开串口1的中断响应函数USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//打开串口1USART_Cmd(USART1, ENABLE);}//配置中断void NVIC_cfg(){NVIC_InitTypeDef NVIC_InitStructure;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//选择中断分组2NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQChannel;//选择串口1中断NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//抢占式中断优先级设置为0NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;//响应式中断优先级设置为0NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能中断NVIC_Init(&NVIC_InitStructure);}然后在stm32f10x_it.c文件中找到相应的中断处理函数,并填入一下内容。

相关文档
最新文档