STM32的USART串口通信(指令控制RGB彩灯)

一、实验仪器

开发板:野火指南者(STM32F103VET6高速版)带3.2寸屏
代码编译:Keil5
USBQ驱动:CH340
串口调试助手Fire Tools(v1.0.1.5)

二、实验前准备

1、把开发板按照说明书连接好,连接到电脑上,拨动左下角开关,红灯亮说明开关打开,新的开发板屏幕显示如手机界面相似的界面。
在这里插入图片描述

但是我之前已经烧录了别的程序进去,所以现在屏幕是灭的,等你们烧录程序进去后也会灭,不要慌张,这是正常的。

2、安装USB转串口驱动CH340
1)首先保证指南者开发板连接在电脑上
2)打开你购买指南者开发板时获得的资料,点击5-开发软件
在这里插入图片描述
3)进去后是几个压缩包,解压,打开USB转串口驱动_CH340
在这里插入图片描述
4)然后双击CH341SER进行安装,小窗口出现后点击安装,此时要保证开发板连接在电脑上且处于通电状态,否则会显示安装失败。如图显示则安装成功。
在这里插入图片描述
3、安装串口多功能调试助手Fire Tools
1)进入多功能调试助手文件夹
在这里插入图片描述
2)打开新版的Fire Tools,进入Fire Tools文件
在这里插入图片描述
3)双击打开名称为Fire Tools的应用程序,备用
在这里插入图片描述
在这里插入图片描述

三、开始实验

默认你们的Keil5已经安装好,还没安装的同学去安装好了再回来继续看。
1、Keil5源程序准备
1)打开资料中的程序源码,进入《STM32库开发实战指南》文件夹
在这里插入图片描述
在这里插入图片描述
2)找到21-USART—串口通信,进入
在这里插入图片描述
3)本次实验我选中USART1指令控制RGB彩灯的代码,双击进入
在这里插入图片描述
4)进入文件后,点击Project->RVMDK(uv5),找到Keil5的工程文件,双击打开
在这里插入图片描述
3、Keil5程序调试及配置
1)打开工程后,在左边找到并打开USER文件夹,打开main.c文件
在这里插入图片描述
2)调试一下看程序是否正确,如果显示0错误0警告,就可以了
在这里插入图片描述
3)开始配置,点击魔术棒开始配置,出现配置窗口(一直到现在开发板是通电状态)
在这里插入图片描述
4)找到Debug选项,在Use处选择CMSIS-DAP Debugger
在这里插入图片描述
5)下一个Utilities,勾选Use Debug Driver
在这里插入图片描述
6)回到Debug选项,进入Settings
在这里插入图片描述
7)在Settings中的Debug选项,按照如图设置
在这里插入图片描述

如果CMSIS-DAP和SWDIO处没有显示出开发板,首先检查开发板和电脑的连接是否正确,开发板是否通电,若还是显示不出,往下滑到第五、更新驱动 部分参考解决。

8)点击Flash Download,按箭头1处设置,此时箭头2所指方框处应显示读取的开发板相关信息,若信息不对,可通过Add添加,按OK确认设置。
在这里插入图片描述
4、烧录程序
1)上述配置好后,重新编译检查错误,若正确,点击load把程序烧录到开发板中。
在这里插入图片描述
2)烧录过程中左下角有进度条,烧录成功后有如图显示。
在这里插入图片描述

四、实验结果

1、打开刚刚安装好的多功能调试助手,点击一次1处的打开串口,然后按一下开发板的RESET复位键,此时出现2方框处的一连串信息,这是程序运行的结果。
在这里插入图片描述
2、可以输入对应指令让开发板的小灯亮不同的颜色
在这里插入图片描述
在3处输入指令,如输入1,然后点发送数据,开发板会亮红灯
在这里插入图片描述
输入指令5,开发板亮紫灯
在这里插入图片描述
输入8,开发板灯灭
在这里插入图片描述
3、至此实验结束。

五、更新驱动

1、打开电脑的设备管理器,找到BETTER_USB,右键点击更新驱动程序
在这里插入图片描述
2、选择浏览我的计算机以查找驱动程序软件
在这里插入图片描述
3、让我从计算机上的可用驱动程序列表中选取
在这里插入图片描述
4、选择USB输入设备,然后下一步
在这里插入图片描述
5、更新成功,关闭。回到Keil5程序重新调试和配置,此时应该检测出了相应的开发板。
在这里插入图片描述

总结
以上就是STM32 串口通信的相关内容,在实践过程中我们遇到了不少问题,在老师、同学以及淘宝客服的集思广益和指导下,终于实验成功,这就很nice。
参考资料:
《零死角玩转STM32——F103指南者》

  • 10
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
以下是一个基于OpenMV和STM32的颜色识别与串口通信的代码示例,你可以根据自己的需求进行修改: OpenMV代码: ```python import sensor, image, time from pyb import UART # 初始化串口 uart = UART(3, 115200) # 颜色阈值,可以根据实际情况进行调整 red_threshold = (30, 100, 15, 127, 15, 127) sensor.reset() sensor.set_pixformat(sensor.RGB565) sensor.set_framesize(sensor.QVGA) sensor.skip_frames(time = 2000) sensor.set_auto_gain(False) sensor.set_auto_whitebal(False) while(True): img = sensor.snapshot() # 寻找颜色区域 blobs = img.find_blobs([red_threshold]) if blobs: # 找到最大的颜色区域 max_blob = max(blobs, key=lambda b: b.pixels()) # 在颜色区域中心画十字线 img.draw_cross(max_blob.cx(), max_blob.cy()) # 发送数据到串口 uart.write(str(max_blob.cx()) + ',' + str(max_blob.cy()) + '\r\n') ``` STM32代码: ```c #include "stm32f10x.h" #include "stdio.h" void USART1_Config(void); void delay_ms(uint16_t ms); int main(void) { USART1_Config(); while(1) { uint8_t buffer[50] = {0}; uint8_t index = 0; uint8_t data; // 等待接收到换行符 do { while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET); data = USART_ReceiveData(USART1); buffer[index++] = data; }while(data != '\n'); // 解析数据 uint16_t x, y; sscanf((const char*)buffer, "%hu,%hu", &x, &y); printf("x: %d, y: %d\r\n", x, y); delay_ms(100); } } void USART1_Config() { USART_InitTypeDef USART_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); USART_InitStructure.USART_BaudRate = 115200; 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(USART1, &USART_InitStructure); USART_Cmd(USART1, ENABLE); } void delay_ms(uint16_t ms) { uint16_t i, j; for(i = 0; i < ms; i++) { for(j = 0; j < 1141; j++); } } ``` 在此示例中,OpenMV通过UART将识别到的颜色区域中心坐标发送给STM32STM32通过串口接收数据并解析,最后打印在终端上,你可以根据自己的需要进行进一步的处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值