STM32 实现串口通信 库函数版

串口设置的一般步骤可以总结为如下几个步骤:

  1. 串口时钟使能,GPIO 时钟使能
    串口是挂载在 APB2 下面的外设,所以使能函数为:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1);
  1. 串口复位
    当外设出现异常的时候可以通过复位设置,实现该外设的复位,然后重新配置
    这个外设达到让其重新工作的目的。一般在系统刚开始配置外设的时候,都会先执行复位该外
    设的操作。复位的是在函数 USART_DeInit()中完成:
void USART_DeInit(USART_TypeDef* USARTx);//串口复位
  1. GPIO 端口模式设置
void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct);
  1. 串口参数初始化
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); //初始化串口
  1. 开启中断并且初始化 NVIC(如果需要开启中断才需要这个步骤)
  2. 使能串口
  3. 编写中断处理函数

实现代码如下:


#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实现串口通信 库函数版相关推荐

  1. 在WEBSTART中实现串口通信(WINDOWS版)

    在WEBSTART中实现串口通信(WINDOWS版) 看到这个题目,你是不是问:这跟在JAVA中实现串口通信有什么区别?在JAVA中能做在WEBSTART中不就 一样吗? 真聪明,的确是这样的,但事实 ...

  2. FPGA自学笔记--串口通信发送多字节数据(verilog版)

    1.需求分析 关于uart协议实现这部分大家可以参考我上一篇的博客.<FPGA自学笔记--串口通信实现(vivado&verilog版)>.在上一篇博客中,主要实现了将单字节的数据 ...

  3. 51单片机学习笔记(清翔版)(19)——串口通信

    学好了中断再学串口通信 今天这课内容是关于数据传输的,在工业控制和商业控制是很重要的.数据传输包含串口.并行通信. 这里说的计算机都可以理解为单片机,因为工作方式是一样的. 单片机通信是指单片机之间, ...

  4. STM32F103C6T6A USB虚拟串口调测 cubeIDE HAL库函数版一篇就够了

    STM32F103C6T6A  USB虚拟串口调测 cubeIDE HAL库函数版 原先手上有一块STM32F103RTC6测试版,但怎么弄不不出现usb设备(正常插上usb口pc应该会识别一个unk ...

  5. javarxtx串口接收时数据会分成好几段_【STM32】串口通信基本原理(超基础、详细版)...

    STM32F1xx官方资料: <STM32中文参考手册V10>-第25章通用同步异步收发器(USART) 通信接口背景知识 设备之间通信的方式 一般情况下,设备之间的通信方式可以分成并行通 ...

  6. pic常用子程序c语言,手把手教你使用PIC单片机做RS232串口通信实验(C语言版)

    这一期,我们将一起来学习一下PIC单片机如何与PC机进行通信,一起来完成一个简单的RS232通信实例,我们不做太多的理论,从实例出发,相信能够给大家一个比较通俗.透彻地认识,掌握了它的原理,那你就可以 ...

  7. 【STM32】串口通信基本原理(超基础、详细版)

    STM32F1xx官方资料: <STM32中文参考手册V10>-第25章通用同步异步收发器(USART) 通信接口背景知识 设备之间通信的方式 一般情况下,设备之间的通信方式可以分成并行通 ...

  8. STM32 —— STM32 的串口通信

    STM32 -- STM32 的串口通信 STM32的串口通信接口有两种,分别是:UART(通用异步收发器).USART(通用同步异步收发器).而对于大容量 STM32F10x 系列芯片,分别有 3 ...

  9. STM32入门笔记(02):定时器之定时器中断、输入捕获和PWM输出(SPL库函数版)

    目录 定时器 8个定时器 定时器功能 定时器中断 常用通用定时器的寄存器 定时器中断实验目的: 定时器库函数及步骤 实验程序讲解 PWM 简介 STM32 PWM工作过程 PWM模式1 与 PWM模式 ...

  10. 在Arduino 完成STM32板子的串口通信程序

    文章目录 要求 一.软件安装 二.编译及烧录 三.结果 四.标准库函数与HAL库函数的stm32编程方式差异 五.国人版的MCU集成开发平台 要求 安装 Ardunio IDE 和相关软件支持库,在A ...

最新文章

  1. WM8962 HPOUT 信号强度 时间周期
  2. shell在linux里摇摇晃晃
  3. Linux下关机、重启
  4. 养成重构的习惯有多重要
  5. 用python倒序输出一个字符串_Python字符串逆序输出的实例讲解
  6. LeetCode198——house robber(不懂dp)
  7. python中*args和**args的不同
  8. 关于scanf和cin的大数据读入效率
  9. 【5折秒杀】戴尔轻薄商务本只卖2899元,狂降1000元
  10. FineReport:任意时刻只允许在一个客户端登陆账号的插件
  11. 初识GaussDB(for Cassandra)
  12. 今天诛仙3服务器维护么2014年4月27,诛仙2021年3月4日更新维护公告 诛仙2021年3月4日更新维护内容一览_手心游戏...
  13. jpa 公共字段顺序_临沂沂水景观花箱销售公司公共使用
  14. iframe重新加载与修改提交不关闭窗口属性页面
  15. Atitit.dwr3 不能显示错误详细信息的解决方案,控件显示错误详细信息的解决方案 java .net php
  16. python中的filter函数
  17. CF914D Bash and a Tough Math Puzzle
  18. python win32api键盘_python基于win32api实现键盘输入
  19. 小程序 富文本WxParse 内容循环
  20. 视频压缩软件如何下载

热门文章

  1. 安卓ttf格式的字体包_字体 | 新游黑体(游)精巧的日系字体~
  2. [数字图像处理·冈萨雷斯 ] 图像文件格式
  3. 电阻式传感器原理与应用
  4. 计算机操作系统学习笔记+思维导图——西安电子科技大学(第四版)
  5. flutter 集成融云 sdk
  6. 也许下一个倾家荡产的就是你
  7. 在注册表里删除没用的服务
  8. 安徽大学线性代数习题册(第三章详细解答)
  9. Java、JSP网上购物系统
  10. Mysql个人学习笔记