STM32 串口实验 【STM32 实验 串口实验】串口设置的一般步骤:
1.串口时钟使能,GPIO时钟使能
2.串口复位
3.GPIO端口模式设置
4.串口参数初始化
5.开启中断并初始化NVIC(如果需要开启中断才需要这个步骤)
6.使能串口
7.编写中断处理函数
串口初始化和中断接收的文件在共用文件SYSTEM—USART文件夹内,
1.串口时钟/GPIO时钟使能: 串口和GPIO都是挂载在APB2总线,
使能函数:
RCC_APB2periphClockCma(RCC_APB2periph_USARTx | RCC_APB2peiphClockCmd_GPIOx,
EANBLE);
//x表示串口位号和GPIO端口号
2.串口复位 函数:USART_DeInit()
比如复位串口1
USART_DeInit(USART1)
3.GPIO端口模式设置: 1.设置GPIO_pin脚—GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
2.设置GPIO端口速率—GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz
3.设置GPIO模式—GPIO_InitStructure.GPIO_Mode = GPIO_mode_AF_PP;
4.初始化GPIO端口—GPIO_Init(GPIOA,&GPIO_InitStructure);
4.串口参数初始化 串口初始化由函数:USART_Init()实现
void USART_Init(USART_TypeDef * USARTx,USART_TypeDef * USART_InitStruct)
第一参数是确定串口号;
第二个参数用来设置串口的参数,主要有:
1.波特率设置—USART_InitStructure.USART_BaudRate = bound;
2.字长设置—USART_InitStructure.USART_WordLendth = USART_WordLength_8b
3.设置停止位—USART_InitStructure.USART_StopBits = USART_StopBits_1;
4.检测有奇偶校验—UASRT_InitStructure.USART_Parity = USART_Parity_No;
5.检测有无硬件数据流控制—USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
6.设置收发模式—USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_TX;
7.初始化串口—USART_Init(USARTx,&GPIO_InitStructure);
5数据收发 数据的发送和接收 是通过数据寄存器 USART_DR来实现;
发送数据:
USART_SendData(USARTx,uint16_t Data)
接收数据:USART_ReceiveData(USARTx)
6串口状态 串口状态由状态寄存器 USART_SR 读取,主要关注第5-6位:RXNE和TC、
RXNE(读数据寄存器非空):这个位置被置1的时候,表示已经有数据被接收到并且可以读取出来。此时 应该去读取USART_DR,让该位清零或者直接向这个位写0来清零。
TC(发送完成):这个位被置1时,表示USART_DR内的数据被发送完成了,如果设置了这个位的中断,中断就会产生。清零方式:1.读USART_SR,写USART_DR;2.直接写0.
读取串口状态的函数是:USART_GetFlagStatus(USARTx,USART_FLAG_xxxx);
USART_FLAG_xxxx 表示我们需要查看串口的哪种状态,比如RXNE 或者 TC
7.串口使能 串口使能函数:USART_Cmd()
例:
USART_Cmd(USART1,EANBLE) //使能串口1
8.开启串口响应中断 开启串口中断,还需要使能串口中断;串口中断使能函数:USART_ITConfig(USARTx,USART_IT_xxxx,ENAVLE)
USART_IT_xxxx:表示标识的使能串口的类型,比如RXNE 或者TC
9.获取相应的中断状态 使用的函数是:USART_GetITStatus(USARTx,USART_IT_xxxx)
比如:USART_GetITStaysa(USART1,USART_IT_TC)
硬件验证:开发板上RX/TX 接到 六合一串口模块上的TX/RX上;GND接GND 让开发板和串口模块共地。打开XCOM V2.0串口助手,选择COM口,设置波特率(与软件设置的波特率一样),勾选发送新行。
推荐阅读
- 嵌入式软件|【STM32+cubemx】0013 HAL库开发(SPI总线访问气压计BMP280/BME280)
- stm32|跳过51单片机,直接学STM32有什么严重后果()
- c语言|最近在学C语言,非常痛苦,怎么办()
- stm32|简单的STM32蓝牙遥控小车完整项目及资料分享,超全
- arduino|【毕业设计】基于arduino的蓝牙扫地机器人
- 不眠者科技团队|(不眠者①队)国电-F题(智能送药小车,广东赛区一等奖,推国赛,开源(代码+设计方案))
- 单片机|vb6.0开发的上位机串口助手(自动识别电脑端口号、支持文本、十六进制发送)
- 单片机|直流电机与PID——编码器电机使用(一)
- 电子设计大赛|2021年全国大学生电子设计大赛F题——智能送药小车,全方位解决方案+程序代码(详细注释)山东赛区国奖