目录

  • 一、中断控制
    • 1.硬件部分
    • 2.软件部分
      • 编程要点
  • 二、程序编写
    • 主要代码分析
  • 三、连接电路 观察结果
  • 四、总结
  • 五、参考资料

本文基于: STM32系统利用串口助手给上位机(win10)连续发送“hello windows!”。

一、中断控制

1.硬件部分

USART 有多个中断请求事件

为利用 USART 实现开发板与电脑通信,需要用到一个 USB 转 USART 的 IC,我们选择 CH340G 芯片来实现这个功能,CH340G 是一个 USB 总线的转接芯片,实现 USB 转USART、USB 转 lrDA 红外或者 USB 转打印机接口,我们使用其 USB 转 USART 功能。具体电路设计见图 21-9。
我们将 CH340G 的 TXD 引脚与 USART1 的 RX 引脚连接,CH340G 的 RXD 引脚与USART1的 TX引脚连接。CH340G芯片集成在开发板上,其地线(GND)已与控制器的 GND连通。

2.软件部分

创建了两个文件:bsp_usart.c 和 bsp _usart.h 文件用来存放 USART 驱动程序及相关宏定义。

编程要点

使能 RX 和 TX 引脚 GPIO 时钟和 USART 时钟;
初始化 GPIO,并将 GPIO 复用到 USART 上;
配置 USART 参数;
配置中断控制器并使能 USART 接收中断;
使能 USART;
在 USART 接收中断服务函数实现数据接收和发送。

二、程序编写

参考:链接:https://pan.baidu.com/s/125MJu4aQSN_wJtqZplbioA
提取码:0123

主要代码分析


中断控制器 NVIC 配置

static void NVIC_Configuration(void)
{NVIC_InitTypeDef NVIC_InitStructure;/* 嵌套向量中断控制器组选择 */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
/* 配置 USART 为中断源 */
NVIC_InitStructure.NVIC_IRQChannel = DEBUG_USART_IRQ;/* 抢断优先级为 1 */NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;/* 子优先级为 1 */NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;/* 使能中断 */NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;/* 初始化配置 NVIC */NVIC_Init(&NVIC_InitStructure);}

USART 初始化配置

void USART_Config(void){GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;// 打开串口 GPIO 的时钟DEBUG_USART_GPIO_APBxClkCmd(DEBUG_USART_GPIO_CLK, ENABLE);// 打开串口外设的时钟DEBUG_USART_APBxClkCmd(DEBUG_USART_CLK, ENABLE);// 将 USART Tx 的 GPIO 配置为推挽复用模式GPIO_InitStructure.GPIO_Pin = DEBUG_USART_TX_GPIO_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(DEBUG_USART_TX_GPIO_PORT, &GPIO_InitStructure);// 将 USART Rx 的 GPIO 配置为浮空输入模式GPIO_InitStructure.GPIO_Pin = DEBUG_USART_RX_GPIO_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(DEBUG_USART_RX_GPIO_PORT, &GPIO_InitStructure);// 配置串口的工作参数// 配置波特率
USART_InitStructure.USART_BaudRate = DEBUG_USART_BAUDRATE;// 配置 针数据字长USART_InitStructure.USART_WordLength = USART_WordLength_8b;// 配置停止位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(DEBUG_USARTx, &USART_InitStructure);// 串口中断优先级配置NVIC_Configuration();// 使能串口接收中断
USART_ITConfig(DEBUG_USARTx, USART_IT_RXNE, ENABLE);// 使能串口USART_Cmd(DEBUG_USARTx, ENABLE);}

字符发送函数

/***************** 发送一个字符 **********************/void Usart_SendByte( USART_TypeDef * pUSARTx, uint8_t ch){/* 发送一个字节数据到 USART */USART_SendData(pUSARTx,ch);/* 等待发送数据寄存器为空 */while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET);}/***************** 发送字符串 **********************/void Usart_SendString( USART_TypeDef * pUSARTx, char *str){unsigned int k=0;do {Usart_SendByte( pUSARTx, *(str + k) );k++;} while (*(str + k)!='\0');/* 等待发送完成 */while (USART_GetFlagStatus(pUSARTx,USART_FLAG_TC)==RESET) {}
}

Usart_SendByte 函数用来在指定 USART 发送一个 ASCLL 码值字符,它有两个形参,第一个为 USART,第二个为待发送的字符。它是通过调用库函数 USART_SendData 来实现的,并且增加了等待发送完成功能。通过使用 USART_GetFlagStatus 函数来获取 USART 事件标志来实现发送完成功能等待,它接收两个参数,一个是 USART,一个是事件标志。

中断服务函数

void DEBUG_USART_IRQHandler(void){uint8_t ucTemp;if (USART_GetITStatus(DEBUG_USARTx,USART_IT_RXNE)!=RESET) {ucTemp = USART_ReceiveData( DEBUG_USARTx );USART_SendData(USARTx,ucTemp);}}

这段代码是存放在 stm32f4xx_it.c 文件中的,该文件用来集中存放外设中断服务函数。当我们使能了中断并且中断发生时就会执行这里的中断服务函数。

主函数

int main(void){/*初始化 USART 配置模式为 115200 8-N-1,中断接收*/USART_Config();Usart_SendString( DEBUG_USARTx,"这是一个串口中断接收回显实验\n");while (1) {}}

首先我们需要调用 USART_Config 函数完成 USART 初始化配置,包括 GPIO 配置,USART 配置,接收中断使能等等信息。

三、连接电路 观察结果


成功的用stm32芯片向上位机连续发送“hello wondows!”,并且输入stop,stm32!
后停止发送

四、总结

对于刚刚学的人来说,本文根本看不懂,可以先学习中断和串口通信再做,收获会更多。

五、参考资料

https://blog.csdn.net/ssj925319/article/details/110431320
STM32系统利用串口助手给上位机(win10)连续发送“hello windows!”。
stm32cubemx采用中断方式利用开关点灯
零死角玩转STM32—F103指南者.pdf
提取码:0123

stm32f103c8tx芯片采用中断方式向上位机(win10)发送“hello windows”———USART 串口通讯相关推荐

  1. STM32F103C8T6核心开发板下,采用串口DMA方式向上位机连续发送数据的实例详解

    STM32采用串口DMA方式,用115200bps或更高速率向上位机连续发送数据 文章目录 STM32采用串口DMA方式,用115200bps或更高速率向上位机连续发送数据 前言 一.DMA应用初步 ...

  2. 【嵌入式12】DMA通信原理及编程实验,DMA方式向上位机连续发送数据

    本文介绍DMS通信原理,STM32采用串口DMA方式,用115200bps或更高速率向上位机连续发送数据. 一.DMA介绍 什么是DMA? DMA介绍 DMA传输方式 DMA传输参数 DMA数据传输的 ...

  3. python隐藏画笔箭头的函数是hide_Python开发的串行通信上位机程序三部曲第三部分,串口,通讯,用,图形,方式,显示,数据...

    用Visual Basic或者C#, LabVIEW等软件开发的上位机界面,和文本式交互界面比较而言,就是可以用图形方式来显示数据.那么python可不可以用图形来显示数据呢?Of course! 和 ...

  4. 上位机与台达DVP-SS2 PLC串口通讯

    目标:上位机作为主站,PLC作为从站,采用标准的Modbus-rtu通讯协议,实现上位机对PLC的控制,例如读取X,Y状态,设置Y的状态,读取D的值等等. 配置:上位机,串口调试软件,RS232串口, ...

  5. python 串口上位机_如何使用Python开发串口通讯上位机(二)

    黑色的dos窗口对于大部分来说,页面极为不友好,且操作不方便,因此本篇主要讲讲如何结合QtDesigner创建一个UI并初步与串口Api链接.1 QtDesigner进行上位机页面设计 Python下 ...

  6. 使用51单片机采用中断方式进行串口通信的学习记录:

    使用51单片机进行串口通信的学习记录之中断方式: 1.51单片机采用中断方式的串口通信过程及程序分析: 所谓中断方式,就是串口收/发标志位出发中断后,在中断中执行既定操作,可通过函数调用来实现. 接收 ...

  7. 数电实验三 数据选择器及其应用 任务一:用74151芯片采用降维的方法实现F=ABC+ABD+ACD+BCD; 任务二:用74151芯片采用降维方式实现F=BCD反+BC反+A反D;

    数电实验三 数据选择器及其应用 任务一:用74151芯片采用降维的方法实现F=ABC+ABD+ACD+BCD; 任务二:用74151芯片采用降维方式实现F=BCD反+BC反+A反D: 实验数据单

  8. 上位机与PLC 通讯源码 上位机与三菱PLC,西门子PLC通讯 同时一起通讯,单独控制,三菱采用官方MX 通讯,支持三菱FX系列,

    上位机与PLC 通讯源码 上位机与三菱PLC,西门子PLC通讯 同时一起通讯,单独控制,三菱采用官方MX 通讯,支持三菱FX系列,A系列,Q系列,L系列,R系列,全系系列,各种串口和各种网口通讯,, ...

  9. 上位机与PLC 通讯源码 上位机与三菱PLC,西门子PLC通讯

    上位机与PLC 通讯源码 上位机与三菱PLC,西门子PLC通讯 同时一起通讯,单独控制,三菱采用官方MX 通讯,支持三菱FX系列,A系列,Q系列,L系列,R系列,全系系列,各种串口和各种网口通讯,, ...

最新文章

  1. 【新周报(045)】青少年编程竞赛交流群周报
  2. angularJS1笔记-(18)-$http及用angular实现JSONP跨域访问过程
  3. 硬核Redis总结,看这篇就够了!
  4. mysql安装 demo [linux centos7] [5.7.26]
  5. ASP.NET--窗体实现淡入淡出效果
  6. 转行算法,90%的人还没开始就错在了这1步
  7. Java接口default方法思考钻石问题
  8. Win7中CHM打不开的解决方法
  9. 《股票大作手操盘术》读书笔记
  10. 自媒体/新媒体写作技巧
  11. java实现word、pdf文件下载功能
  12. 怎样压缩Word文档,Word压缩技巧分享
  13. MySQL入门第十天(数据库编程)
  14. tcp三次握手丢包后会发生什么
  15. css 设置body的最小高度是100%,满屏显示
  16. 子类调用父类构造器《转载》
  17. 知识图谱入门 【九】- 知识问答
  18. python的八大排序算法
  19. 手机变板砖?这有专业救砖教程
  20. lammps和atomsk中常用的建模方法

热门文章

  1. 鸡兔同笼问题(数学题)
  2. 弱电安防工程中的电线电缆基本只是
  3. 浅析FeiQ解密函数的使用
  4. ELK 系列八、全链路监控
  5. LPDDR5之Link ECC3
  6. Oracle 查询基础练习题 -hr
  7. Unity Shader——夜晚视觉屏幕特效(night vision Screen Effect)
  8. 蓝桥杯训练第七天打卡
  9. 杰理之杰理BLE和通用MCU芯片【篇】
  10. sql语句中使用临时表