STM32F1x系列——串口通信
来源:互联网 发布:ls plc解密软件 编辑:程序博客网 时间:2024/06/05 03:40
一 在STM32F1x系列串口通信实验中,常用的寄存器有:
(1)USART_SR 状态寄存器
(2)USART_DR 数据寄存器
(3)USART_BRR 波特率寄存器
(4) USART_CR 使能位
二 串口操作相关的库函数(省略入口参数):
(1)void USART_Init() ; //串口初始化:波特率,数据字长,奇偶校验,硬件流控以及收发使能
(2)void USART_Cmd ; //使能串口
(3)void USART_ITConfig() ; //使能相关中断
(4)void USART_SendData() ; //发送数据到串口,DR
(5)uint16_t USART_ReceiveData() ; //接受数据,从DR读取接受到的数据
(6)FlagStatus USART_GetFlagStatus() ; //获取状态标志位
(7)void USART_ClearFlag() ; //清除状态标志位
(8)ITStatus USART_GetITStatus() ; //获取中断状态标志位
(9)void USART_ClearITPendingBit() ; //清除中断状态标志位
三 串口配置的一般步骤:
(1)串口时钟使能,GPIO时钟使能:RCC_APB2PeriphClockCmd() ;
(2)串口复位:USART_DeInit() ; 这一步不是必须的
(3)GPIO端口模式设置:GPIO_Init() ; 模式设置为GPIO_Mode_AF_PP
(4)串口参数初始化:USART_Init() ;
(5)开启中断并且初始化NVIC(如果需要开启中断才需要这个步骤):
NVIC_Init() ;
USART_ITConfig() ;
(6)使能串口:USART_Cmd() ;
(7)编写中断处理函数:USARTx_IRQHandler() ;
(8)串口数据的收发:
void USART_SendData() ; //发送数据到串口,DR
uint16_t USART_ReceiveData() ; //接受数据,从DR读取接受到的数据
(9)串口传输状态获取:
FlagStatus USART_GetFlagStatus(RT_FLAUSART_TypeDef * USARTx , uint16_t USART_FLAG) ;
void USART_ClearITPendingBit(RT_FLAUSART_TypeDef * USARTx , uint16_t USART_IT) ;
程序中的main.c文件 代码如下:
#include "stm32f10x.h" void My_USART1_Init() { GPIO_InitTypeDef GPIO_InitStruct ; USART_InitTypeDef USART_InitStruct ; NVIC_InitTypeDef NVIC_InitStruct ; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE) ; //GPIO时钟使能 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE) ;//´串口时钟使能 GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP ; //GPIO端口模式设置 GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9 ; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_10MHz ; GPIO_Init(GPIOA,&GPIO_InitStruct) ; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING ; //GPIO端口模式设置 GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10 ; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_10MHz ; GPIO_Init(GPIOA,&GPIO_InitStruct) ; USART_InitStruct.USART_BaudRate = 115200 ; USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None ; USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx ; USART_InitStruct.USART_Parity = USART_Parity_No ; USART_InitStruct.USART_StopBits = USART_StopBits_1 ;USART_InitStruct.USART_WordLength = USART_WordLength_8b ; USART_Init(USART1,&USART_InitStruct) ; USART_Cmd(USART1,ENABLE) ; //串口使能USART_ITConfig(USART1,USART_IT_RXNE,ENABLE) ; //打开接收中断NVIC_InitStruct.NVIC_IRQChannel = USART1_IRQn ;NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE ;NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1 ;NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1 ;NVIC_Init(&NVIC_InitStruct) ; } void USART1_IRQHandler(void) //中断服务函数 { u8 res ; if(USART_GetITStatus(USART1,USART_IT_RXNE)) { res = USART_ReceiveData(USART1) ; USART_SendData(USART1,res) ; } } int main(void) { NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //系统中断优先级分配为2 My_USART1_Init() ; while(1) ; }
打开串口调试助手调试:
成功运行
- STM32F1x系列——串口通信
- STM32F1x系列——12864
- STM32F1x系列——GPIO操作
- STM32F1x系列——按键输入实验
- STM32F1x系列——外部中断
- STM32F1x系列——定时器中断
- STM32F1x系列——Flash 模拟 EEPROM
- STM32F1x系列——跑马灯实验-库函数
- 裸机系列——2440串口通信
- 裸机系列——2440串口通信
- arduino学习系列——串口通信
- 裸机系列——2440串口通信2程序代码
- C# 串口通信系列
- 串口通信系列一
- 串口通信——读串口信息
- Symbian串口通信——设备上USB串口通信
- STM32——串口通信
- android——串口通信
- AVL树的实现
- Android第一次
- C语言以字符形式读写文件
- springMVC接收前端json数据的总结
- 【算法题】分田地
- STM32F1x系列——串口通信
- 【Java8源码分析】locks包-ReentrantReadWriteLock
- 5-1 冒泡法排序 (20分)
- Android studio 的布局
- python 的ide编辑器下载地址
- 配置MAVEN
- Java泛型的理解
- 让Hibernate识别数据库特有字段
- Android_studio布局