stm32f103c8tx芯片采用中断方式向上位机(win10)发送“hello windows”———USART 串口通讯
目录
- 一、中断控制
- 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 串口通讯相关推荐
- STM32F103C8T6核心开发板下,采用串口DMA方式向上位机连续发送数据的实例详解
STM32采用串口DMA方式,用115200bps或更高速率向上位机连续发送数据 文章目录 STM32采用串口DMA方式,用115200bps或更高速率向上位机连续发送数据 前言 一.DMA应用初步 ...
- 【嵌入式12】DMA通信原理及编程实验,DMA方式向上位机连续发送数据
本文介绍DMS通信原理,STM32采用串口DMA方式,用115200bps或更高速率向上位机连续发送数据. 一.DMA介绍 什么是DMA? DMA介绍 DMA传输方式 DMA传输参数 DMA数据传输的 ...
- python隐藏画笔箭头的函数是hide_Python开发的串行通信上位机程序三部曲第三部分,串口,通讯,用,图形,方式,显示,数据...
用Visual Basic或者C#, LabVIEW等软件开发的上位机界面,和文本式交互界面比较而言,就是可以用图形方式来显示数据.那么python可不可以用图形来显示数据呢?Of course! 和 ...
- 上位机与台达DVP-SS2 PLC串口通讯
目标:上位机作为主站,PLC作为从站,采用标准的Modbus-rtu通讯协议,实现上位机对PLC的控制,例如读取X,Y状态,设置Y的状态,读取D的值等等. 配置:上位机,串口调试软件,RS232串口, ...
- python 串口上位机_如何使用Python开发串口通讯上位机(二)
黑色的dos窗口对于大部分来说,页面极为不友好,且操作不方便,因此本篇主要讲讲如何结合QtDesigner创建一个UI并初步与串口Api链接.1 QtDesigner进行上位机页面设计 Python下 ...
- 使用51单片机采用中断方式进行串口通信的学习记录:
使用51单片机进行串口通信的学习记录之中断方式: 1.51单片机采用中断方式的串口通信过程及程序分析: 所谓中断方式,就是串口收/发标志位出发中断后,在中断中执行既定操作,可通过函数调用来实现. 接收 ...
- 数电实验三 数据选择器及其应用 任务一:用74151芯片采用降维的方法实现F=ABC+ABD+ACD+BCD; 任务二:用74151芯片采用降维方式实现F=BCD反+BC反+A反D;
数电实验三 数据选择器及其应用 任务一:用74151芯片采用降维的方法实现F=ABC+ABD+ACD+BCD; 任务二:用74151芯片采用降维方式实现F=BCD反+BC反+A反D: 实验数据单
- 上位机与PLC 通讯源码 上位机与三菱PLC,西门子PLC通讯 同时一起通讯,单独控制,三菱采用官方MX 通讯,支持三菱FX系列,
上位机与PLC 通讯源码 上位机与三菱PLC,西门子PLC通讯 同时一起通讯,单独控制,三菱采用官方MX 通讯,支持三菱FX系列,A系列,Q系列,L系列,R系列,全系系列,各种串口和各种网口通讯,, ...
- 上位机与PLC 通讯源码 上位机与三菱PLC,西门子PLC通讯
上位机与PLC 通讯源码 上位机与三菱PLC,西门子PLC通讯 同时一起通讯,单独控制,三菱采用官方MX 通讯,支持三菱FX系列,A系列,Q系列,L系列,R系列,全系系列,各种串口和各种网口通讯,, ...
最新文章
- 【新周报(045)】青少年编程竞赛交流群周报
- angularJS1笔记-(18)-$http及用angular实现JSONP跨域访问过程
- 硬核Redis总结,看这篇就够了!
- mysql安装 demo [linux centos7] [5.7.26]
- ASP.NET--窗体实现淡入淡出效果
- 转行算法,90%的人还没开始就错在了这1步
- Java接口default方法思考钻石问题
- Win7中CHM打不开的解决方法
- 《股票大作手操盘术》读书笔记
- 自媒体/新媒体写作技巧
- java实现word、pdf文件下载功能
- 怎样压缩Word文档,Word压缩技巧分享
- MySQL入门第十天(数据库编程)
- tcp三次握手丢包后会发生什么
- css 设置body的最小高度是100%,满屏显示
- 子类调用父类构造器《转载》
- 知识图谱入门 【九】- 知识问答
- python的八大排序算法
- 手机变板砖?这有专业救砖教程
- lammps和atomsk中常用的建模方法