Ardunio和HAL库函数的stm32编程


一、安装Ardunio IDE和相关支持库

1、Ardunio是什么

Arduino是一款便捷灵活、方便上手的开源电子原型平台。包含硬件(各种型号的Arduino板)和软件(ArduinoIDE)。具有使用类似Java、C语言的Processing/Wiring开发环境。

● 跨平台
Arduino IDE可以在Windows、Macintosh OS X、Linux三大操作系统上运行,而其他的大多数控制器只能在Windows上开发。

● 简单清晰
Arduino IDE基于processing IDE开发。对于初学者来说,极易掌握,同时有着足够的灵活性。Arduino语言不需要太多的单片机基础、编程基础,简单学习后,你也可以快速的进行开发。

● 开放性
Arduino的硬件原理图、电路图、IDE软件及核心库文件都是开源的,在开源协议范围内里可以任意修改原始设计及相应代码。

● 发展迅速
Arduino也是一个优秀的硬件开发平台。简单的开发方式使得开发者更关注创意与实现,更快的完成自己的项目开发,大大节约了学习的成本,缩短了开发的周期。

2、安装及配置过程

双击arduino-1.8.12-windows.exe安装,一直默认next。
在这里插入图片描述
在这里插入图片描述
安装结束。


将打包文件中的Arduino_STM32整个文件夹复制到Arduino IDE安装目录下的hareware下
在这里插入图片描述
打开Arduino,安装编译支持文件
在菜单栏选择工具–>开发板;“Arduino Uno”–>第一栏的开发板管理器—>安装如图所示编译支持文件
在这里插入图片描述
安装串口烧录软件flash_loader_demo_v2.8.0.exe
在这里插入图片描述
next–>Finish安装结束

将USB转TTL工具上的VCC,GND,TXD,RXD 分别与开发板的 VC,GND,RXD,TXD 相连。
将STM32开发板的BOOT0用短路冒接入高电平1,用跳帽将BOOT0与3v3相连,BOOT1与GND相连,RXD与A9相连
BOOT1用短路冒接入低电平0
确认USB转TTL工具连线无误后,将USB转TLL插入电脑USB接口
在系统菜单中找到Demonstrator GUI并打开

测试芯片能否正常工作:
此处采用Ardunio本身的实例程序。在调试之前,根据下载方式、芯片等,对Ardunio进行配置,这里用的是指南者,采用的串口下载。

在这里插入图片描述
在这里插入图片描述

二、STM32板的串口通信程序

在Ardunio 完成STM32板子的串口通信程序:1)持续向串口输出“Hello world!”;2)当接收到“stop!”时,停止输出。

1.代码

int flag=1;   
char Stop[]="stop\n";
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[i] = Serial.read();    //从串口的缓冲区取出并读取一个Byte的数据
        delay(10); 
        i++ ;                              
}
if(Stop[i]=inByte[i])
{
  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

2.烧录

依次点击验证,烧录。(每次烧录文件前要按开发板上的RESET按钮)
在这里插入图片描述
小灯开始闪烁,串口收到的信息点击串口监视器及可看到

在这里插入图片描述
输出显示
在这里插入图片描述
在这里插入图片描述

三、基于标准库函数与HAL库的差异

1、标准库

STM32有非常多的寄存器,开发困难,为此要为每款芯片都编写了一份库文件。在这些 .c .h文件中,包括一些常用量的宏定义,把一些外设也通过结构体变量封装起来,如GPIO口时钟等。所以我们只需要配置结构体变量成员就可以修改外设的配置寄存器,从而选择不同的功能。没有可移植性。使用很多。

基于标准库的stm32代码:

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("\r\n您发送的消息为:\r\n\r\n");
			for(t=0;t<len;t++)
			{
				USART_SendData(USART1, USART_RX_BUF[t]);//向串口1发送数据
				while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
			}
			printf("\r\n\r\n");//插入换行
			USART_RX_STA=0;
		}else
		{
			times++;
			if(times%5000==0)
			{
				printf("\r\nSTM32开发板 串口实验\r\n");
				printf("心梦浮生(https://blog.csdn.net/weixin_47192105)\r\n\r\n");
			}
			if(times%200==0)printf("请输入数据,以回车键结束\r\n"); 
			if(times%30==0){LED0=!LED0; LED1=!LED1;}//闪烁LED,提示系统正在运行.
			delay_ms(10);   
		}
	}	 
 }


2、HAL库

它的出现比标准库要晚,HAL库的一些函数可以做到某些特定功能的集成。同样的功能,标准库可能要用几句话,HAL库只需用一句话就够了。并且HAL库也很好的解决了程序移植的问题。

基于HAL库的STM32代码(功能与基于标准库函数的代码相同):

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("\r\n您发送的消息为:\r\n");
			HAL_UART_Transmit(&UART1_Handler,(uint8_t*)USART_RX_BUF,len,1000);	//发送接收到的数据
			while(__HAL_UART_GET_FLAG(&UART1_Handler,UART_FLAG_TC)!=SET);		//等待发送结束
			printf("\r\n\r\n");//插入换行
			USART_RX_STA=0;
		}else
		{
			times++;
			if(times%5000==0)
			{
				printf("\r\nSTM32开发板 串口实验\r\n");
				printf("心梦浮生(https://blog.csdn.net/weixin_47192105)\r\n\r\n\r\n");
			}
			if(times%200==0)printf("请输入数据,以回车键结束\r\n");  
			if(times%30==0)LED0=!LED0;//闪烁LED,提示系统正在运行.
			delay_ms(10);   
		} 
    }
}


总结:
1、HAL库的出现比标准库要晚,节省程序HAL库有效,标准库把实现功能需要配置的寄存器集成了,HAL库的一些函数甚至可以做到某些特定功能的集成。也就是说,同样的功能,标准库可能要用几句话,HAL库只需用一句话就够了。
2、HAL库也很好的解决了程序移植的问题,不同型号的stm32芯片它的标准库是不一样的,例如在F4上开发的程序移植到F3上是不能通用的,而使用HAL库,只要使用的是相通的外设,程序基本可以完全复制粘贴,注意是相通外设,意思也就是不能无中生有,例如F7比F3要多几个定时器,不能明明没有这个定时器却非要配置,但其实这种情况不多,绝大多数都可以直接复制粘贴。


四、了解stduino IDE

Stduino IDE是一款面向32位处理器快速入门学习的集成开发平台,已率先支持Arduino_Core_STM32框架,集聚快捷、高效、免费、开源、易得于一身,软件还集成了GDB调试功能!

与Arduino IDE对比
1、stduino界面更复杂,不如arduino简洁
2、两者功能差不多
3、stduino没有复杂的安装操作,双击即可运行
4、stduino较大,运行较慢

stduino IDE 试玩
在这里插入图片描述
在这里插入图片描述
代码编写:与Arduino IDE串口通信的代码基本一致

总结

虽然已经有了Keil、Ardunio,但是它们都还是有改进的空间,“再造车轮”也没什么不好,不断地探索,去短补长。

参考: stduino IDE试用

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值