STM3 2实现串口通信 库函数版
STM32 实现串口通信 库函数版
串口设置的一般步骤可以总结为如下几个步骤:
- 串口时钟使能,GPIO 时钟使能
串口是挂载在 APB2 下面的外设,所以使能函数为:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1);
- 串口复位
当外设出现异常的时候可以通过复位设置,实现该外设的复位,然后重新配置
这个外设达到让其重新工作的目的。一般在系统刚开始配置外设的时候,都会先执行复位该外
设的操作。复位的是在函数 USART_DeInit()中完成:
void USART_DeInit(USART_TypeDef* USARTx);//串口复位
- GPIO 端口模式设置
void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct);
- 串口参数初始化
USART_InitStructure.USART_BaudRate = bound; //波特率设置;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为 8 位数据格式
USART_InitStructure.USART_StopBits = USART_StopBits_1; //一个停止位
USART_InitStructure.USART_Parity = USART_Parity_No; //无奇偶校验位
USART_InitStructure.USART_HardwareFlowControl= USART_HardwareFlowControl_None; //无硬件数据流控制
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收发模式
USART_Init(USART1, &USART_InitStructure); //初始化串口
- 开启中断并且初始化 NVIC(如果需要开启中断才需要这个步骤)
- 使能串口
- 编写中断处理函数
实现代码如下:
#include "Uart.h"
int fputc(int ch,FILE *p) //函数默认的,在使用printf函数时自动调用
{USART1->DR=ch; while((USART1->SR & 0x40) == 0);return ch;
}/*串口初始化*/
void UART1_Init(u32 bound)
{GPIO_InitTypeDef gpioO;USART_InitTypeDef usartT;NVIC_InitTypeDef nvicN;//时钟外设设置 GPIOA USART1RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1,ENABLE);//GPIO A9 TX A10 RXgpioO.GPIO_Pin = GPIO_Pin_9;gpioO.GPIO_Mode = GPIO_Mode_AF_PP; //推挽 复用gpioO.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA,&gpioO);gpioO.GPIO_Pin = GPIO_Pin_10;gpioO.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空 输入GPIO_Init(GPIOA,&gpioO);usartT.USART_BaudRate = bound; //波特率usartT.USART_WordLength = USART_WordLength_8b; //((uint16_t)0x0000)usartT.USART_StopBits = USART_StopBits_1; //1 停止位usartT.USART_Parity = USART_Parity_No; //奇偶校验usartT.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //无硬件数据流usartT.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收发模式 RX ((uint16_t)0x0004) tx ((uint16_t)0x0008)USART_Init(USART1,&usartT);USART_Cmd(USART1,ENABLE); //使能串口1USART_ClearFlag(USART1,USART_FLAG_TC); //清除标志位USART_ITConfig(USART1,USART_IT_RXNE,ENABLE); //开启相关中断//NVIC配置nvicN.NVIC_IRQChannel = USART1_IRQn; //中断nvicN.NVIC_IRQChannelCmd = ENABLE;nvicN.NVIC_IRQChannelPreemptionPriority = 1;nvicN.NVIC_IRQChannelSubPriority = 3;NVIC_Init(&nvicN);}void USART1_IRQHandler()
{u8 res = '2';if(USART_GetITStatus(USART1,USART_IT_RXNE ) != RESET) //接收中断{res = USART_ReceiveData(USART1); //接收数据 (USART1->DR)USART_SendData(USART1,res); //发送数据//printf("\r\n已收到\r\n");while(USART_GetFlagStatus(USART1,USART_FLAG_TC) != SET);}USART_ClearFlag(USART1,USART_FLAG_TC);}
下篇使用寄存器实现串口通信
STM3 2实现串口通信 库函数版相关推荐
- 在WEBSTART中实现串口通信(WINDOWS版)
在WEBSTART中实现串口通信(WINDOWS版) 看到这个题目,你是不是问:这跟在JAVA中实现串口通信有什么区别?在JAVA中能做在WEBSTART中不就 一样吗? 真聪明,的确是这样的,但事实 ...
- FPGA自学笔记--串口通信发送多字节数据(verilog版)
1.需求分析 关于uart协议实现这部分大家可以参考我上一篇的博客.<FPGA自学笔记--串口通信实现(vivado&verilog版)>.在上一篇博客中,主要实现了将单字节的数据 ...
- 51单片机学习笔记(清翔版)(19)——串口通信
学好了中断再学串口通信 今天这课内容是关于数据传输的,在工业控制和商业控制是很重要的.数据传输包含串口.并行通信. 这里说的计算机都可以理解为单片机,因为工作方式是一样的. 单片机通信是指单片机之间, ...
- STM32F103C6T6A USB虚拟串口调测 cubeIDE HAL库函数版一篇就够了
STM32F103C6T6A USB虚拟串口调测 cubeIDE HAL库函数版 原先手上有一块STM32F103RTC6测试版,但怎么弄不不出现usb设备(正常插上usb口pc应该会识别一个unk ...
- javarxtx串口接收时数据会分成好几段_【STM32】串口通信基本原理(超基础、详细版)...
STM32F1xx官方资料: <STM32中文参考手册V10>-第25章通用同步异步收发器(USART) 通信接口背景知识 设备之间通信的方式 一般情况下,设备之间的通信方式可以分成并行通 ...
- pic常用子程序c语言,手把手教你使用PIC单片机做RS232串口通信实验(C语言版)
这一期,我们将一起来学习一下PIC单片机如何与PC机进行通信,一起来完成一个简单的RS232通信实例,我们不做太多的理论,从实例出发,相信能够给大家一个比较通俗.透彻地认识,掌握了它的原理,那你就可以 ...
- 【STM32】串口通信基本原理(超基础、详细版)
STM32F1xx官方资料: <STM32中文参考手册V10>-第25章通用同步异步收发器(USART) 通信接口背景知识 设备之间通信的方式 一般情况下,设备之间的通信方式可以分成并行通 ...
- STM32 —— STM32 的串口通信
STM32 -- STM32 的串口通信 STM32的串口通信接口有两种,分别是:UART(通用异步收发器).USART(通用同步异步收发器).而对于大容量 STM32F10x 系列芯片,分别有 3 ...
- STM32入门笔记(02):定时器之定时器中断、输入捕获和PWM输出(SPL库函数版)
目录 定时器 8个定时器 定时器功能 定时器中断 常用通用定时器的寄存器 定时器中断实验目的: 定时器库函数及步骤 实验程序讲解 PWM 简介 STM32 PWM工作过程 PWM模式1 与 PWM模式 ...
- 在Arduino 完成STM32板子的串口通信程序
文章目录 要求 一.软件安装 二.编译及烧录 三.结果 四.标准库函数与HAL库函数的stm32编程方式差异 五.国人版的MCU集成开发平台 要求 安装 Ardunio IDE 和相关软件支持库,在A ...
最新文章
- WM8962 HPOUT 信号强度 时间周期
- shell在linux里摇摇晃晃
- Linux下关机、重启
- 养成重构的习惯有多重要
- 用python倒序输出一个字符串_Python字符串逆序输出的实例讲解
- LeetCode198——house robber(不懂dp)
- python中*args和**args的不同
- 关于scanf和cin的大数据读入效率
- 【5折秒杀】戴尔轻薄商务本只卖2899元,狂降1000元
- FineReport:任意时刻只允许在一个客户端登陆账号的插件
- 初识GaussDB(for Cassandra)
- 今天诛仙3服务器维护么2014年4月27,诛仙2021年3月4日更新维护公告 诛仙2021年3月4日更新维护内容一览_手心游戏...
- jpa 公共字段顺序_临沂沂水景观花箱销售公司公共使用
- iframe重新加载与修改提交不关闭窗口属性页面
- Atitit.dwr3 不能显示错误详细信息的解决方案,控件显示错误详细信息的解决方案 java .net php
- python中的filter函数
- CF914D Bash and a Tough Math Puzzle
- python win32api键盘_python基于win32api实现键盘输入
- 小程序 富文本WxParse 内容循环
- 视频压缩软件如何下载