串口通信操作STM32f4单片机LED 蜂鸣器(io)

首先将串口与PC通信

单片机中串口1需要连接p6 中的PA9连接rxd PA10连接txd并使能相应io,io模式为挽推复用,复用为串口USART1(单片机串口1使用usb-串口与pc连接)。

在对串口和io初始化后,我们要对串口进行中断设置和优先级设置以便于我们处理串口发送的数据。
HAL_NVIC_EnableIRQ(USART1_IRQn); //使能 USART1中断通道
HAL_NVIC_SetPriority(USART1_IRQn,3,3); //抢占优先级 3,子优先级 3
下面开启中断,其参数含义为串口句柄,数据缓冲区指针,数据量。
HAL_UART_Receive_IT(&UART1_Handler, (u8 *)aRxBuffer, RXBUFFERSIZE);
HAL库中有通用的中断处理函数,存在的意义是方便移植,他本身并不是中断函数的实现。
void HAL_UART_IRQHandler(UART_HandleTypeDef *huart);
这个函数进行了一些串口连接超时处理,而在其中HAL_UART_IRQHandler(&UART1_Handler);
此函数判断串口状态以及所属平台等(部分判断意义我不明)
状态正常则执行中断函数的实现HAL_UART_RxCpltCallback(huart);
一般的HAL库的中断处理函数只有上述一个入口,实现代码为

其中USART_RX_STA是接收标识,初值为0每接收一个缓存RxXferSize(我们设置为1字节)就加一,通过和0x8000做位于运算可以得知最高位是否为1,为1则说明接收完毕。接收的数据我们定义了一个u8(无符号char形)数组u8 USART_RX_BUF[USART_REC_LEN];来存储其中USART_REC_LEN=200.
以上串口调用部分就完成了
在主函数中直接使用printf语句就能将数据从单片机上发到pc上位机中。效果如图(qt学习中有做过一个简单的pc串口上位机)

那么pc能不能通过给单片机发送某个特定的数据来操作单片机的io呢?
当然是可以的。
思路与起调串口io一致,在串口中断函数中可以使用strcmp函数(两字符串相等返回0)直接与从串口接收到的数据对比,若发送了设置好的字符如:打开LED 则操作相应io。
查单片机使用手册可知灯 DS0 DS1 和蜂鸣器分别对应PF9 PF10 PF8,都是上拉生效可以一起定义初始化。
HAL库直接提供了函数HAL_GPIO_WritePin(GPIOF,GPIO_PIN_9,GPIO_PIN_RESET);
在初始化后直接可以操作,其中GPIO_PIN_RESET为拉低GPIO_PIN_SET为拉高。
还有一种方式是使用带位操作来实现,相比于hal库更加灵活,通过io地址映射来实现,列如点亮灯DS0
PFout(9)=1;即可
PFout函数中封装BIT_ADDR(GPIOF_ODR_Addr,n)函数addr对应参数1,n对应参数2
(addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2) 带位操作地址计算。以上完成了对LED灯和蜂鸣器的操作。
那么接下来直接将pc通过串口发送的数据进行对比选择拉高/拉低哪个io即可。
但实际操作中 我发现直接使用指针访问USART_RX_BUF(保存串口接收数据的数组)出现乱码,原因未知。改用循环遍历将数组元素取出成功。主要代码如下:


由于验证无法通过图片表示这里不贴图了。下附录源代码
https://download.csdn.net/download/qq_40099293/12458206

串口通信操作STM32f4单片机LED 蜂鸣器(io)相关推荐

  1. 串口通信-电脑控制单片机点亮LED

    前言 此篇只对各函数功能做通俗易懂的解释,适合初学者理解串口通信的功能. 一.串口通信 1.什么是串口通信 我们使用的usb转串口是经典的串口通信之一,实现了电脑与单片机之间的联系,将程序通过串口从电 ...

  2. STM32定时器实现5秒周期串口通信,2秒LED灯闪烁

    文章目录 前言 一.定时器Timer 1.定时器定义 2.定时器分类 3.计数器模式 4.时钟产生器和时基单元 5.工作原理 二.实验步骤 1.用STM32CubeMx创建项目 1.1 创建项目 1. ...

  3. chord协议模拟实现_C#.NET和单片机串口通信实现监控单片机数字量输入继电器输出模拟量输入模拟量输出...

    一.必备软件和硬件: 1.C#.NET: 2.单片机开发板: 3.通信电缆. 二.通信参数: 1.数据位:8位 2.校验方式:无校验 3.停止位:1位 4.波特率:9600bps 5.通信协议:自定义 ...

  4. chord协议模拟实现_VB.NET和单片机串口通信实现监控单片机数字量输入继电器输出模拟量输入模拟量输出...

    一.必备软件和硬件: 1.VB.NET: 2.单片机开发板: 3.通信电缆. 二.通信参数: 1.数据位:8位 2.校验方式:无校验 3.停止位:1位 4.波特率:9600bps 5.通信协议:自定义 ...

  5. 51单片机串口通信模板_51单片机串口通信

    51 单片机串口通信 51 单片机串口通信(转载) 2009-03-03 18:22 一.串口通信原理 串口通讯对单片机而言意义重大,不但可以实现将单片机的数据传输到计 算机端,而且也能实现计算机对单 ...

  6. 51单片机串口通信模板_51单片机串口通讯UART

    须由软件来清0,. 串行发送中断标志TI和接收中断标志RI是同一个中断源,CPU事先不知道是发送中断TI还是接收中断RI产生的中断请求,所以,在全双工通信时,必须由软件来判别.复位时SCON所有位都清 ...

  7. 51单片机串口通信模板_51单片机串口通信(字符串接收和发送)(示例代码)

    1 #include 2 3 //------------------串口通信协议-----------------//4 /* 5 客户端数据包格式解释(长度恒为15):6 例如:A01_fmq_0 ...

  8. HAL库中断方式实现串口通信操作

    文章目录 一.实验工具 二.CubeMX配置项目 1.引脚配置 2.RCC设置 3.SYS设置 4.USART设置 5.NVIC设置 6.创建项目 三.keil中配置代码 1.main函数前定义全局变 ...

  9. c51单片机串口通信电脑向单片机发送数据

    main.c #include <REGX52.H> #include "UART.H"void Delay(int t) { while(--t); }void ma ...

最新文章

  1. python编写直角三角形边长公式_304不锈钢的重量计算公式,留着总有用处
  2. html5中在canvas上绘图
  3. int、bigint、mediumint、smallint、tinyint的比较
  4. 解决 VUE: [Vue warn]: Do not use built-in or reserved HTML elements as component id: xx
  5. 从0开始搭建公司后台技术栈,这套架构值得拥有...
  6. 【java】JDK8的HashMap
  7. 《互联网+ 电商平台设计与运营》一一2.4 小结
  8. 华语名嘴乌镇较劲 李咏有价值汪涵有才智
  9. 【Win10】【Win2D】实现控件阴影效果
  10. html中标记pre的作用是什么,html中pre和code标签
  11. 我的世界租赁服自定义服务器,我的世界租借服务器(我的世界技巧教程 租赁服务器玩家间传送功能)...
  12. 从GDPR和个保法看,为什么要做数据合规?
  13. 日紫白飞星算法_年月日时紫白飞星算法
  14. 大学C语言 算法的定义及特点教案,第2章 算法的概念和特性介绍_福州大学数计学院:C语言程序设计(韩晓芸)_ppt_大学课件预览_高等教育资讯网...
  15. 英文论文发表必备干货!SCI投稿7个阶段经典邮件模板,请拿走
  16. 第17课:生活中的享元模式——颜料很贵必须充分利用
  17. android 动画直播,直播动画实现方案一
  18. Mac的esc键失效的解决方法
  19. 新基建下的工业互联网,等不到第四次工业革命
  20. python 学习过程中所收藏博客原文链接666666

热门文章

  1. 热血江湖按键精灵游戏脚本!
  2. python代码阅读神器,加速掌握开源项目
  3. 2020.8.26丨代谢组测序产品概述
  4. 洞察与思考Fuzzing技术发展趋势
  5. Ubuntu查看定时任务执行日志
  6. HTTPS原理与证书生成
  7. 无线智能插座Android手机客户端软件主控制MainActivity代码实现
  8. 菜鸟教程python3在线工具_3个非常实用的Python爬虫工具,你会几个?
  9. 胶囊网络(学习笔记)
  10. 【基础】Java 并发编程(上)