1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
一、Ardunio 完成STM32板子的串口通信
1、安装Ardunio软件 下载解压安装包后安装Ardunio,直接默认安装即可 2、配置Ardunio 将打包文件中的Arduino_STM32整个文件夹复制到Arduino安装目录下的hareware下 复制完成后打开Arduino,点击菜单栏工具开发板开发板管理器 输入ARM关键字搜索,选中Cortex-M3系列的编译支持文件并安装 安装完成后,在工具开发板选择芯片类型,由于本人使用的是stm32f103指南者,所以选择为Generic STM32F103V series。 接着Variant选择STM32F103VE Upload method选择Serial 3、编写程序 程序要求: (1)持续向串口输出“Hello world!”; (2)当接收到“stop”时,停止输出。 int flag=1; char Stop[]=“stopn”; void setup() { //初始化pinMode(PB0, OUTPUT); //PB0为绿色,PB1为蓝色,PB5为红色,可根据需要改动Serial.begin(115200); } void loop() {int i=0,flag_s=0;char inByte[50]; digitalWrite(PB0, HIGH); //小灯亮delay(500); // 延迟digitalWrite(PB0, LOW); //小灯灭delay(500); // 延迟while (Serial.available()》 0) //当发送缓冲区有数据时 { inByte = Serial.read(); //从串口的缓冲区取出并读取一个Byte的数据 delay(10); i++ ; } if(Stop=inByte) { if(Stop[i-1]==inByte[i-1]&&Stop[i-2]==inByte[i-2]&&Stop[i-3]==inByte[i-3]) { flag=0; Serial.println(“收到!”); } //当收到stop命令时停止并回复收到}if(flag==1) { Serial.println(“Hello World!”); //向串口发送数据delay(100); // 延迟 } } 4、烧录程序 连接开发板(本人用的是ST-Link连接线) 选择串口COM3 依次点击验证和上传 上传成功 LED灯开始闪烁 发现串口输出的显示有些不对,这是波特率设置的问题,该把波特率设置为115200。 输入stop,停止发送 二、基于标准库函数与基于HAL库函数的stm32编程方式的差异 1、标准外设库 标准外设库(Standard Peripherals Library)是对STM32芯片的一个完整的封装,包括所有标准器件外设的器件驱动器,可以让我们写代码时更简洁。这应该是目前使用最多的ST库,几乎全部使用C语言实现。但是,标准外设库也是针对某一系列芯片而言的,没有可移植性。 基于标准库的串口通信的代码 int main(void) { u16 t; u16 len; u16 times=0; delay_init(); //延时函数初始化 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 uart_init(115200); //串口初始化为115200 LED_Init(); //LED端口初始化 KEY_Init(); //初始化与按键连接的硬件接口 while(1) { if(USART_RX_STA&0x8000) { len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度 printf(“rn您发送的消息为:rnrn”); for(t=0;t《len;t++) { USART_SendData(USART1, USART_RX_BUF[t]);//向串口1发送数据 while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束 } printf(“rnrn”);//插入换行 USART_RX_STA=0; }else { times++; if(times%5000==0) { printf(“rn精英STM32开发板 串口实验rn”); printf(“正点原子@ALIENTEKrnrn”); } if(times%200==0)printf(“请输入数据,以回车键结束rn”); if(times%30==0){LED0=!LED0; LED1=!LED1;}//闪烁LED,提示系统正在运行。 delay_ms(10); } } } 2、HAL库 HAL库是用来取代之前的标准外设库的。相比标准外设库,STM32Cube HAL库表现出更高的抽象整合水平,HAL API集中关注各外设的公共函数功能,这样便于定义一套通用的用户友好的API函数接口,从而可以轻松实现从一个STM32产品移植到另一个不同的STM32系列产品。而且HAL库不光实现了寄存器的集成,还实现了一些特定功能的集成,也就是说标准外设库有时需要用几行代码完成的,HAL库一行代码就可以完成。 基于HAL库的串口通信 int main(void){ u8 len; u16 times=0; HAL_Init(); //初始化HAL库 Stm32_Clock_Init(RCC_PLL_MUL9); //设置时钟,72M delay_init(72); //初始化延时函数 uart_init(115200); //初始化串口 LED_Init(); //初始化LED KEY_Init(); //初始化按键 while(1) { if(USART_RX_STA&0x8000) { len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度 printf(“rn您发送的消息为:rn”); HAL_UART_Transmit(&UART1_Handler,(uint8_t*)USART_RX_BUF,len,1000); //发送接收到的数据 while(__HAL_UART_GET_FLAG(&UART1_Handler,UART_FLAG_TC)!=SET); //等待发送结束 printf(“rnrn”);//插入换行 USART_RX_STA=0; }else { times++; if(times%5000==0) { printf(“rnALIENTEK 精英STM32开发板 串口实验rn”); printf(“正点原子@ALIENTEKrnrnrn”); } if(times%200==0)printf(“请输入数据,以回车键结束rn”); if(times%30==0)LED0=!LED0;//闪烁LED,提示系统正在运行。 delay_ms(10); } } } 3、差异 1、标准库向串口输出的代码 for(t=0;t《len;t++) { USART_SendData(USART1, USART_RX_BUF[t]);//向串口1发送数据 while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束 } 2、HAL库向串口输出的代码 HAL_UART_Transmit(&UART1_Handler,(uint8_t*)USART_RX_BUF,len,1000); //发送接收到的数据 HAL库不光实现了寄存器的集成,还实现了一些特定功能的集成,也就是说标准外设库有时需要用几行代码完成的,HAL库一行代码就可以完成,使用HAL库将明显减少了开发时间。 三、stduino IDE的使用体会 1、Stduino IDE Stduino IDE是一款面向32位处理器快速入门学习的集成开发平台,已率先支持Arduino_Core_STM32框架,集聚快捷、高效、免费、开源、易得于一身,软件还集成了GDB调试功能! 官网界面 下载后软件界 编写程序 String data = “”;void setup() { // put your setup code here, to run once: pinMode(PB0, OUTPUT); Serial.begin(115200);}void loop() { // put your main code here, to run repeatedly: while (Serial.available() 》 0) { data += char(Serial.read()); delay(2); } if (data == “stop!”) { digitalWrite(PB0, HIGH); Serial.println(“STM32 has stopped!n”); data = “”; while(1); } digitalWrite(PB0, HIGH); //turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second digitalWrite(PB0, LOW); //turn the LED off by making the voltage LOW delay(1000); // wait for a second Serial.println(“Hello World!”); delay(1000); // wait for a second} 进行编译和烧录 打开串口监视器 四、小结 通过对Arduino的初步认识与学习,感受到了Arduino的简单易用以及良好的编程环境,大大提高了我对Arduino开发板的兴趣。其中也遇到了不少问题,但在解决问题的同时,也提升了分析问题,解决问题的能力。希望自己日后可以腾出更多的时间来了解并学习Arduino。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1777 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1621 浏览 1 评论
1080 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
728 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1678 浏览 2 评论
1938浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
731浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
570浏览 3评论
595浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
554浏览 3评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 07:43 , Processed in 1.180571 second(s), Total 76, Slave 60 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号