完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
STM32F1串口通信-查询方式 STM32F1的串口有好几组,STM32的串口还有分数波特率发生器、支持同步单线通信和半双工单线通讯、支持 LIN、 支持调制解调器操作、 智能卡协议和 IrDA SIR ENDEC 规范、具有 DMA等。 虽然有这么多功能,但是这里为了总结串口的原理,采用最简单的查询的方式和电脑进行通信。 其实原子哥的《STM32F1开发指南-库函数版本》已经解释的非常详细了,这里只是按照我自己的风格叙述一遍而已。 使用串口的步骤 1,打开IO时钟 2,配置串口IO口模式,具体方式查看《STM32中文参考手册》8.1.11章节,接收引脚和发送引脚模式不一样的,所以要分别配置。 5,打开串口时钟 6,配置前最好复位下串口,这是个好习惯 7,配置串口,就是配置完串口初始化函数里面的选项就好了 8,使能串口 9,配置完成,下面可以正式使用了 本实验的功能;接收从电脑发送来的数据,然后发送回去 数据接收和发送的步骤; 1,不停地查询接收数据的状态标志位 2,当查询到有数据来时就接收数据放在变量中 3,发送接收到的数据, 4,等待数据发送完成,查询数据发送完成状态标志位 5,继续等待接收数据 注意;本实验只是示例,每次接收的数据长度是有限制的,本实验只是总结下串口的原理,估计项目中不会有人这样使用串口。 代码如下; #include "sys.h" #include "delay.h" /************************************************************ 功能;接收从电脑发送来的信息,并发送回电脑 串口接在PA9,PA10 串口配置步骤 为了更好的说明串口的本质,这里采用查询的方式,并没有使用中断 1,打开串口IO时钟 2,选择串口接收 引脚 3,选择接收引脚模式,这个模式要看《中文手册》8.1.11章节 4,配置IO翻转速度 5,配置串口发送引脚,方法同串口接收引脚,但是IO模式不一样 6,打开uart1时钟 7,选择串口波特率 8,选择是否需要硬件流控制 9,打开接收和发送模式 10,选择是否启用奇偶校验 11,选择停止位个数 12,选择数据长度 13,配置完成后一定要记得使能串口 14,不断查询接收状态位,然后该干嘛就干嘛去,发送数据的时候记得等待数据发送完成 ****************************************************************/ void init__uart1() { GPIO_InitTypeDef GPIO_InitStruct; USART_InitTypeDef USART_InitStruct; // 串口IO配置,PA9,PA10 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//IO时钟打开 GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;//IO方式具体看《中文手册》8.1.11章节 GPIO_InitStruct.GPIO_Pin=GPIO_Pin_9; GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOA,&GPIO_InitStruct); GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IN_FLOATING;//IO方式具体看《中文手册》8.1.11章节 GPIO_InitStruct.GPIO_Pin=GPIO_Pin_10; GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOA,&GPIO_InitStruct); //配置串口1 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//打开串口时钟 USART_DeInit(USART1);//在配置串口前复位下是个好习惯 USART_InitStruct.USART_BaudRate=115200; //波特率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; //停止位1位 USART_InitStruct.USART_WordLength=USART_WordLength_8b; //数据长度8位 USART_Init(USART1,&USART_InitStruct); USART_Cmd(USART1,ENABLE); //配置完成后一定要记得使能串口 } int main(void) { char re_data=0;//为了接收字符,还是定义为字符类型吧 delay_init(); //延时函数初始化 init__uart1();//串口1初始化 while(1) { if(USART_GetFlagStatus(USART1,USART_FLAG_RXNE)==1) //查询接收数据状态标志位 { re_data=USART_ReceiveData(USART1); //接收数据 USART_SendData(USART1,re_data); //发送数据 while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET); //等待数据发送完毕 } } } |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1752 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1611 浏览 1 评论
1052 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
721 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1666 浏览 2 评论
1926浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
711浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
560浏览 3评论
583浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
544浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-18 16:04 , Processed in 0.699644 second(s), Total 74, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号