完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
一、串口通信简介
1、串口通信概念2.USART通用同步异步收发器(Universal Synchronous Asynchronous Receiver and Transmitter) USART是一个串行通信设备,可以灵活地与外部设备进行全双工数据交换。二、stm32串口通信实验 1.功能要求 1)设置波特率为115200,1位停止位,无校验位。 2)STM32系统给上位机(win10)连续发送“hello windows!”,上位机接收程序可以使用“串口调试助手“,也可自己编程。 3)当上位机给stm32发送“Stop,stm32”后,stm32停止发送。 使用的为野火STM32F103指南者 2.步骤 下载图中圈出的三个压缩包 用u***线把stm32开发板和电脑相连接,stm32端连接的 ‘u***转串口’这个接口,再打开stm32开关,可以看到红色的小灯亮起。 连接过后打开CH341SER.EXE,点击安装,显示安装成功即可。 打开串口下载助手mcuisp 按如下方式配置:①搜索串口,设置波特率 115200(尽量不要设置的太高) ,②选择要下载的 HEX 文件、③校验、编程后执行、④DTR 低电平复位,RTS 高电平进入 bootloader、⑤开始编程。(前4步一定要调试正确,否则可能连接不上) 3.代码及效果图 打开1.程序源码_教程文档—>再打开1-[野火]《STM32库开发实战指南》(标准库源码)【优先学习】—>接下来点开1-书籍配套例程-F103VE指南者.rar下载解压后打开第21个串口通信文件中的USART1接发文件夹,打开后选择下图工程文件 打开后把其中stm32f10x_it.c文件的串口中断服务函数部分改为如下: int i=0; uint8_t ucTemp[50]; void DEBUG_USART_IRQHandler(void) { if(USART_GetITStatus(DEBUG_USARTx,USART_IT_RXNE)!=RESET) { ucTemp = USART_ReceiveData(USART1); } if(ucTemp == '!') { if(ucTemp[i-1] == '2'&&ucTemp[i-2] == '3'&&ucTemp[i-3] == 'm'&&ucTemp[i-4] == 't'&&ucTemp[i-5] == 's'&&ucTemp[i-6] == ' ') if(ucTemp[i-7] == 'p'&&ucTemp[i-8] == 'o'&&ucTemp[i-9] == 't'&&ucTemp[i-10] == 's') { printf("ÊÕµ½£¡"); while(1); } } i++; } main.c函数改为 #include "stm32f10x.h" #include "bsp_usart.h" void delay(uint32_t count) { while(count--); } int main(void) { USART_Config(); while(1) { printf("hello windows 10!n"); delay(5000000); } } 编译生成hex文件 把hex文件烧录到stm32中,然后打开最开始下载的串口调试助手,点击打开串口,即可以看到stm32发给电脑的信息 三、C语言程序里全局变量、局部变量、堆、栈等概念 定义并输出4个全局变量的地址 #include #include #include char g_buf[16]; char g_buf2[16]; char g_buf3[16]; char g_buf4[16]; int main() { printf("g_buf: 0x%xn", g_buf); printf("g_buf2: 0x%xn", g_buf2); printf("g_buf3: 0x%xn", g_buf3); printf("g_buf4: 0x%xn", g_buf4); return 0; } 发现地址在全局区域里,依次递增 定义并输出3个局部变量的地址 #include #include #include int main() { char l_buf[16]; char l_buf2[16]; char l_buf3[16]; printf("l_buf: 0x%xn", l_buf); printf("l_buf2: 0x%xn", l_buf2); printf("l_buf3: 0x%xn", l_buf3); } 定义了4个局部变量,并输出它们的地址 它们的地址是递增的 四、C语言程序里全局变量、局部变量、堆、栈等概念,在Keil中针对stm32系统进行编程,调试变量,进行验证 把前面一板块串口的mian.c代码改为下面 #include "stm32f10x.h" #include "bsp_usart.h" #include #include int k1 = 1; int k2; static int k3 = 2; static int k4; void delay(uint32_t count) { while(count--); } int main(void) { USART_Config(); while(1) { static int m1=2, m2; int i = 1; char *p; char str[10] = "hello"; char *var1 = "123456"; char *var2 = "abcdef"; int *p1=malloc(4); int *p2=malloc(4); free(p1); free(p2); printf("栈区-变量地址n"); printf(" i:%pn", &i); printf(" p:%pn", &p); printf(" str:%pn", str); printf("n堆区-动态申请地址n"); printf(" %pn", p1); printf(" %pn", p2); printf("n.bss段n"); printf("全局外部无初值 k2:%pn", &k2); printf("静态外部无初值 k4:%pn", &k4); printf("静态内部无初值 m2:%pn", &m2); printf("n.data段n"); printf("全局外部有初值 k1:%pn", &k1); printf("静态外部有初值 k3:%pn", &k3); printf("静态内部有初值 m1:%pn", &m1); printf("n常量区n"); printf("文字常量地址 :%pn",var1); printf("文字常量地址 :%pn",var2); printf("n代码区n"); printf("程序区地址 :%pn",&main); delay(5000000); } } 按照前面一板块的方法将程序烧进核心板进行串口传输信息到上位机 在stm32上可以看出栈地址是由高地址到低地址向上增长,堆地址是由低地址到高地址向上增长,全局变量是由低向高向上增长。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1874 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1658 浏览 1 评论
1143 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
759 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1720 浏览 2 评论
1963浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
789浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
611浏览 3评论
628浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
590浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-11 12:18 , Processed in 1.051127 second(s), Total 80, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号