完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
一、 串口的基本知识
串口的基本知识,可以参考如下文章: a.串口基础知识文章1 b.串口基础知识文章2 二、STM32配置USART 下面是配置USART过程的思维导图,如下: 下面是各个过程的具体实现过程,并带有注释。 (1)USART对应GPIO配置 具体代码如下: GPIO_InitTypeDef GPIO_InitStructure;//定义GPIO结构体 /*开启时钟*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //UART发送端PA9引脚初始化 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//设置为复用推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA,&GPIO_InitStructure); //UART接收端PA10引脚初始化 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//设置为模拟输入 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA,&GPIO_InitStructure); 需要注意的是:串口发送引脚需要配置成“复用推挽输出”;串口发送引脚需要配置成“模拟输入”; (2)USART设置(包含串口中断设置) 具体代码如下: USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; /*开启时钟*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); //UART初始化设置 USART_InitStructure.USART_BaudRate = bound; //波特率设置,参数传递 USART_InitStructure.USART_Mode = USART_WordLength_8b; //设置帧长度为8位 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //一般选择无硬件流控制 USART_InitStructure.USART_Parity = USART_Parity_No; //无奇偶校验 USART_InitStructure.USART_StopBits = USART_StopBits_1; //一位停止位 USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx; //收发使能 USART_Init(USART1,&USART_InitStructure); //使能串口 USART_Cmd(USART1,ENABLE); //清除串口中断标志 USART_ClearFlag(USART1,USART_FLAG_TC); //使能串口中断 USART_ITConfig(USART1,USART_IT_RXNE,ENABLE); //NVIC配置,凡是使用中断皆配置 NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; //选择中断源,在“stm32f10x.h”文件中查找 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //抢占优先级为2 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //响应优先级为0 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); 需要注意的是: a.NVIC中断控制器的设置 凡是使用中断,都需要配置NVIC,包括中断分组、抢占/响应优先级等,其中的“中断源名称”在“stm32f10x.h”文件中查找。 b.在使能串口中断时,一定要将串口中断标志清除。 (3)串口中断服务函数 具体的代码如下:功能是接送串口发送来的数据 void USART1_IRQHandler(void) { u8 r; if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断 { USART_ClearITPendingBit(USART1,USART_IT_RXNE); r =USART_ReceiveData(USART1);//(USART1->DR); //读取接收到的数据 } } 需要注意的点: a.串口中断服务函数的名称在哪? 在STM32的启动文件里,带汇编的那块 b.获取的串口的标志如何找? 可以参考STM32固件库手册,或参考下面这篇文章: STM32的USART发送数据时如何使用TXE和TC标志 主要是知道各个标志代表的含义是?是在什么时候置1/0?标志需要什么时候清除?例如:USART_IT_RXNE标志,是指串口接受满了,发生中断,此时标志置1,因此可以用来判断串口是否已经接受完成数据。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1649 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1566 浏览 1 评论
994 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
693 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1613 浏览 2 评论
1872浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
656浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
526浏览 3评论
543浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
515浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-27 18:18 , Processed in 0.594442 second(s), Total 43, Slave 37 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号