固件库和STM32程序编写及USART窗口通信

固件库和STM32程序编写及USART窗口通信

文章目录

  • 固件库和STM32程序编写及USART窗口通信
    • 一、基于固件库和寄存器stm32程序编写的区别
      • 1.基于固件库的STM32点亮LED程序编写
      • 2.基于寄存器的STM32点亮LED程序编写
      • 3.寄存器和固件库的区别
    • 二、STM32的USART窗口通讯
      • 1.将程序下载到硬件中
      • 2.利用串口助手进行发送测试
    • 总结

一、基于固件库和寄存器stm32程序编写的区别

1.基于固件库的STM32点亮LED程序编写

  1. 首先完成对LED灯引脚的相关宏定义,其中的 GPIO 时钟“RCC_APB2Periph_GPIOB”是 STM32 标准库定义的 GPIO 端口时钟相关的宏,它的作用与“GPIO_Pin_x”这类宏类似,是用于指示寄存器位的,方便库函数使用。
  2. 完成LED灯亮灭状态的宏定义,方便控制 LED 灯,这部分操作也是直接向寄存器写入控制指令来实现的。
  3. 完成LED GPIO初始化函数,此过程也调用了库函数,该过程调用库函数来使能LED端口时钟。
  4. 主函数中调用之前定义好的初始化好的LED控制引脚,以及之前各种定义好的控制LED状态的宏来控制LED的亮灭情况。

2.基于寄存器的STM32点亮LED程序编写

1.通过们修改输出数据寄存器的值就可以修改 GPIO 引脚的输出电平。而“置位/复位寄存器 GPIOx_BSRR”可以通过修改输出数据寄存器的值从而影响电路的输出,此过程就是利用不同的寄存器来直接对相关的引脚进行电平输入和输出控制。
2. 我们需要在外部定义一个 SystemInit函数设置 STM32 的时钟;STM32 上电后,会执行 SystemInit 函数,最后执行我们 C 语言中的 main 函数。
3. 开启外设时钟,配置引脚模式,控制电平。
4. 主程序中通过设置端口,来实现控制。

3.寄存器和固件库的区别

STM32库函数本质上是对外设寄存器直接编程,只是为了方便应用封装成了函数。所以用户的应用程序也可以绕过库函数,直接对寄存器编程。直接对寄存器编程的代码效率最高。不过,需要花费较多的时间学习和查阅STM32数据手册,这个过程繁琐、易错,难以移植。

二、STM32的USART窗口通讯

1.将程序下载到硬件中

  1. 连接好ST-LINK,安装好设备驱动
    在连接好ST-LINK后可以看到设备管理其中有相应的串口设备。
    固件库和STM32程序编写及USART窗口通信_第1张图片
    这个是USB转TTL,可以实现利用pc机中的串口助手的调试工作
    固件库和STM32程序编写及USART窗口通信_第2张图片

  2. 用KEIL5打开工程,
    主程序:

#include "sys.h"
#include "usart.h"
#include 
int f=1;

/************************************************
 ALIENTEKÕ½½¢STM32¿ª·¢°åʵÑé4
 ´®¿ÚʵÑé 
 ¼¼ÊõÖ§³Ö£ºwww.openedv.com
 ÌÔ±¦µêÆÌ£ºhttp://eboard.taobao.com 
 ¹Øע΢ÐŹ«ÖÚƽ̨΢Ðźţº"ÕýµãÔ­×Ó"£¬Ãâ·Ñ»ñÈ¡STM32×ÊÁÏ¡£
 ¹ãÖÝÊÐÐÇÒíµç×ӿƼ¼ÓÐÏÞ¹«Ë¾  
 ×÷ÕߣºÕýµãÔ­×Ó @ALIENTEK
************************************************/


 int main(void)
 { 
    
    
  char stop[]={'S','t','o','p',',','s','t','m','3','2'};
 	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(f)
	{
		if(USART_RX_STA&0x8000)
		{		   
			len=USART_RX_STA&0x3fff;//得到此次接收的数据长度
			printf("\r\nhello windows!:\r\n\r\n");
			for(t=0;t<len&&USART_RX_BUF[t]==stop[t];f++,t++)
				{if (hcr>=10) {hcr=0;break;}}
				
				
			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%500==0)
			{
				printf("\r\n嵌入式串口实验\r\n");
				printf("hcr@2219491180qqcom\r\n\r\n");
	
			}
			if(times%200==0){printf("hello windows!%d\n",hcr);hcr=1;}  
			if(times%30==0)LED0=!LED0;//闪烁LED,提示系统正在运行
			delay_ms(10);   
		}
	}	 
 }
  1. 在keil5中打开程序,进行仿真器配置
    这里采用的Fire_debug.点击“魔法棒”标志,
    固件库和STM32程序编写及USART窗口通信_第3张图片
    点击‘setting’
    固件库和STM32程序编写及USART窗口通信_第4张图片
    固件库和STM32程序编写及USART窗口通信_第5张图片
    点击图标"load"即可即可下载,若出现问题请检查串口是否配置后。

2.利用串口助手进行发送测试

  1. 采用野火串口调试助手(这里的串口调试工具可以自行去官网下载)
    运用USB转串口接线连接核心板,同样在设备串口处会有显示,打开串口调试助手。
    固件库和STM32程序编写及USART窗口通信_第6张图片
  2. 完成相应连续发送,停止功能。
    固件库和STM32程序编写及USART窗口通信_第7张图片

总结

本次主要学习了利用固件库和STM32进行程序编写的区别和步骤,本次通过学会利用串口通信来进行调试,中间过程涉及到了硬件的使用,会更清楚的掌握相关串口的配置步骤。

你可能感兴趣的:(笔记,stm32,嵌入式,单片机,c语言)