嵌入式stm32_stm32嵌入式 - CSDN
精华内容
参与话题
  • 嵌入式stm32学习之路——第一弹(led流水灯工程)

    万次阅读 多人点赞 2015-01-23 13:07:43
    之前没接触过单片机,初次学习感到很迷茫,从初识stm'32到建工程模板再到第一个(流水灯实验),用了两天半的时间。因为C语言基础不是很好,有很多语句都看不懂,费了很大的劲才把led灯点亮。因为模电和数电都还没学...

    之前没接触过单片机,初次学习感到很迷茫,从初识stm'32到建工程模板再到第一个(流水灯实验),用了两天半的时间。因为C语言基础不是很好,有很多语句都看不懂,费了很大的劲才把led灯点亮。因为模电和数电都还没学,电路图也很难弄懂。

    下面是原理图:


    点亮led的方法


    知道了原理之后,根据方法分析,可制定相应的开发步骤如下:

    1)为控制LED灯,知道要使用 GPIO 外设。
    2)了解GPIO外设有什么功能,要如何使用。
    3)获知GPIO的地址映射,知道它所挂载的总线APB2。
    4)了解ST官方库对寄存器的封装。
    5)了解时钟树,查看 GPIOx(x= A…F)的时钟来源,即PCLK2。
    6)在stm32f10x_conf.h文件中包含用到的头文件stm32f10x_gpio.h 、
    stm32f10x_rcc.h。
    7)在工程模板的基础上添加bsp_xxx.c、bsp_xxx.h用户文件。
    8)编写驱动初始化函数 XXX_GPIO_Confi g() (XXX = LED / KEY …。
    9)开启外设GPIOx x= A…F )时钟,分析由SystemInit()函数配置的默认的
    Sysclk=72MHz 的时钟频率是否符合工程要求。
    10)根据控制要求,定义并填充初始化结构体GPIO_InitStructure向相应的结构体成
    员写入适当的参数。

    11)调用初始化函数GPIO_Init()初始化 GPIOx(x= A…F)。

    12)编写相应的XXX_led.h XXX = LED)头文件。
    13)针对不同的应用要求,编写 main 应用程序。
    14)调试程序、完成

    该步骤也适用任何工程。分析完之后,再写三个文件"bsp_led.c","bsp_led.h"和主函数"main.c"

    下面是头文件bsp_led.h的程序代码

    #include "stm32f10x.h"//这个是STM32的地址映射,包含了STM32的所有寄存器的地址
    
    #define ON  0
    #define OFF 1
    
    // 定义带参宏,可以像内联函数一样使用
    #define LED1(a)	if (a)	\
    					GPIO_SetBits(GPIOB,GPIO_Pin_0);\
    					else		\
    					GPIO_ResetBits(GPIOB,GPIO_Pin_0)
    
    #define LED2(a)	if (a)	\
    					GPIO_SetBits(GPIOC,GPIO_Pin_4);\
    					else		\
    					GPIO_ResetBits(GPIOC,GPIO_Pin_4)
    
    #define LED3(a)	if (a)	\
    					GPIO_SetBits(GPIOC,GPIO_Pin_3);\
    					else		\
    					GPIO_ResetBits(GPIOC,GPIO_Pin_3)
    
    
    
    void LED_GPIO_Config(void);//初始化LED端口
    
    #endif 
    

    头文件的内容不多,但也把它独立成一个头文件,方便以后扩展或移植使用。在写头文件的时候加上类似以下这样的条件编译 :
    #ifndef __LED_H
    #define __LED_H
    ……
    #endif

    这个是非常重要的。


    下面试bsp_led.c文件

    	#include "bsp_led.h"//调用头文件
    	
    	
    	void LED_GPIO_Config(void)//初始化LED的IO
    	{
    		   GPIO_InitTypeDef GPIO_InitStructure;//定义一个GPIO_InitTypeDef类型的结构体  
    		
                      RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC,ENABLE);//开启LED的外设时钟
    		
    		   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;//选择要要控制的GPIOB引脚
    		
    		   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//设置引脚模式为通用推挽输出
    		
    		   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//设置引脚速率为50MHZ
    		
    		   GPIO_Init(GPIOB,&GPIO_InitStructure);//调用库函数,初始化GPIOB0
    <span style="color:#ff0000;">		
    		   /*选择要控制的引脚*/															   
    		   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
    	
    		   GPIO_Init(GPIOC, &GPIO_InitStructure);
    
    		   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
    	
    		   GPIO_Init(GPIOC, &GPIO_InitStructure);	</span>
    	
    	           GPIO_SetBits(GPIOB, GPIO_Pin_0);//关闭所有的led灯
    		
    		   GPIO_SetBits(GPIOC, GPIO_Pin_4|GPIO_Pin_3);//关闭所有的led灯	 
       }
    	
    

    红色部分是非常重要的,一开始我忘记编写了,烧录成功后只有一个;LED灯闪亮。



    下面是主函数main.c的代码

    #include "stm32f10x.h"
    #include "bsp_led.h"//两个头文件都必须包含,不要漏掉
    
      void Delay(__IO uint32_t nCount);//简单的延时函数的声明,在这里延时函数被调用
    
      int main(void)
      {
    	    LED_GPIO_Config();//LED端口的初始化
    	
      	  while(1)
    	    {
                               LED1(ON);
    		           Delay(0x0FFFFF);//延时的时间我用十六进制来表示的,也可以用十进制
    		           LED1(OFF);
    				  
    		           LED2(ON);
    			   Delay(0x0FFFFF);
    			   LED2(OFF);
    				
    			   LED3(ON);
    			   Delay(0x0FFFFF);
    			   LED3(OFF);
    
                }
      }
      void Delay(__IO uint32_t nCount)//简单的延时函数
      {
    	 for(; nCount !=0; nCount--);
      }
    下面来分析一下主函数

    首先调用了在bsp_led.c文件编写的LED_GPIO_Config()函数,完成了对控制LED GPIO 的初始化。紧接着就在 while死循环里不断执行在bsp_led.h文件中编写的带参宏代码,并加上延时函数,使各盏LED轮流亮灭。当然,在LED控制的部分,如果不习惯带参宏的方式,读者也可以直接使用GPIO_SetBits() GPIO_ResetBits() 函数实现对LED的控制。


    第一个工程就这样学完了,当然还存在许多疑问,我相信会慢慢解决的。应该抽时间学一下C语言和模电数电的知识,学习是无止境的,加油吧!!!





    展开全文
  • 五大适合STM32嵌入式操作系统

    万次阅读 2018-03-26 10:23:54
    基于STM平台且满足实时控制要求操作系统,有以下5种可供移植选择。分别为μClinux、μC/OS-II、eCos、FreeRTOS和都江堰操作系统(djyos)。下面分别介绍这五种嵌入式操作系统的特点及不足。1、μClinuxμClinux是一种...

    基于STM平台且满足实时控制要求操作系统,有以下5种可供移植选择。分别为μClinux、μC/OS-II、eCos、FreeRTOS和都江堰操作系统(djyos)。下面分别介绍这五种嵌入式操作系统的特点及不足。

    1、μClinux

    μClinux是一种优秀的嵌入式Linux版本,其全称为micro-control Linux,从字面意思看是指微控制Linux。同标准的Linux相比,μClinux的内核非常小,但是它仍然继承了Linux操作系统的主要特性,包括良好的稳定性和移植性、强大的网络功能、出色的文件系统支持、标准丰富的API,以及TCP/IP网络协议等。因为没有MMU内存管理单元,所以其多任务的实现需要一定技巧。


    μClinux在结构上继承了标准Linux的多任务实现方式,分为实时进程和普通进程,分别采用先来先服务和时间片轮转调度,仅针对中低档嵌入式CPU特点进行改良,且不支持内核抢占,实时性一般。


    在内存管理上由于μClinux是针对没有MMU的处理器设计的,不能使用处理器的虚拟内存管理技术,只能采用实存储器管理策略。系统使用分页内存分配方式,在启动时对实际存储器进行分页。系统对内存的访问是直接的,操作系统对内存空间没有保护,多个进程可共享一个运行空间,所以,即使是一个无特权进程调用一个无效指针也会触发一个地址错误,并有可能引起程序崩溃甚至系统崩溃。


    μClinux操作系统的中断管理是将中断处理分为两部分:顶半处理和底半处理。在顶半处理中,必须关中断运行,且仅进行必要的、非常少、速度快的处理,其他处理交给底半处理;底半处理执行那些复杂、耗时的处理,而且接受中断。因为系统中存在有许多中断的底半处理,所以会引起系统中断处理的延时。


    μClinux对文件系统支持良好,由于μClinux继承了Linux完善的文件系统性能,它支持ROMFS、NFS、ext2、MS-DOS、JFFS等文件系统。但一般采用ROMFS文件系统,这种文件系统相对于一般的文件系统(如ext2)占用更少的空间。但是ROMFS文件系统不支持动态擦写保存,对于系统需要动态保存的数据须采用虚拟RAM盘/JFFS的方法进行处理。


    在对硬件的支持上,由于μClinux继承了Linux的大部分性能,所以至少需要512KB的RAM空间,lMB的ROM/Flash空间。


    在μClinux的移植方面,。μClinux是Linux针对嵌入式系统的一种改良,其结构比较复杂。移植μClinux,目标处理器除了需要修改与处理器相关的代码外,还需要足够容量的外部ROM和RAM。


    综上可知,μClinux最大特点在于针对无MMU处理器设计,这对于没有MMU功能的stm32f103来说是合适的,但移植此系统需要至少512KB的RAM空间,1MB的ROM/FLASH空间,而stmf103拥有256K的FLASH,需要外接存储器,这就增加了硬件设计的成本。μClinux结构复杂,移植相对困难,内核也较大,其实时性也差一些,若开发的嵌入式产品注重文件系统和与网络应用则μClinux是一个不错的选择。


    2、μC/OS-II

    μC/OS-II是在μC/OS的基础上发展起来的,是用C语言编写的一个结构小巧、抢占式的多任务实时内核。μC/OS-II能管理64个任务,并提供任务调度与管理、内存管理、任务间同步与通信、时间管理和中断服务等功能,具有执行效率高、占用空间小、实时性能优良和扩展性强等特点。


    对于实时性的满足上,由于μC/OS-II内核是针对实时系统的要求设计实现的,所以只支持基于固定优先级抢占式调度;调度方法简单,可以满足较高的实时性要求。


    在内存管理上,μC/OS-II把连续的大块内存按分区来管理,每个分区中都包含整数个大小相同的内存块,但不同分区之间内存的大小可以不同。用户动态分配内存时,只须选择一个适当的分区,按块来分配内存,释放时将该块放回到以前所属的分区,这样就消除了因多次动态分配和释放内存所引起的碎片问题。


    μC/OS-II中断处理比较简单。一个中断向量上只能挂一个中断服务子程序ISR,而且用户代码必须都在ISR(中断服务程序)中完成。


    ISR需要做的事情越多,中断延时也就越长。


    内核所能支持的最大嵌套深度为255。


    在文件系统的支持方面,由于μC/OS-II是面向中小型嵌入式系统的,即使包含全部功能,编译后内核也不到10 KB,所以系统本身并没有提供对文件系统的支持。但是μC/OS-II具有良好的扩展性能,如果需要也可自行加入文件系统的内容。


    在对硬件的支持上,μC/OS-II能够支持当前流行的大部分CPU,μC/OS-II由于本身内核就很小,经过裁剪后的代码最小可以为2KB,所需的最小数据RAM空间为4 KB,μC/OS-II的移植相对比较简单,只需要修改与处理器相关的代码就可以。


    综上可知,μC/OS-II是一个结构简单、功能完备和实时性很强的嵌入式操作系统内核,针对于没有MMU功能的CPU,它是非常合适的。它需要很少的内核代码空间和数据存储空间,拥有良好的实时性,良好的可扩展性能,并且是开源的,网上拥有很多的资料和实例,所以很适合向stm32f103这款CPU上移植。


    3、eCos

    eCos(embedded Configurable operating system),即嵌入式可配置操作系统。它是一个源代码开放的可配置、可移植、面向深度嵌入式应用的实时操作系统。最大特点是配置灵活,采用模块化设计,核心部分由小同的组件构成,包括内核、C语言库和底层运行包等。每个组件可提供大量的配置选项(实时内核也可作为可选配置),使用eCos提供的配置工具可以很方便地配置,并通过不同的配置使得eCos能够满足不同的嵌入式应用要求。


    在实时性反面,由于eCos调度方法丰富,提供了两种基于优先级的调度器(即位图调度器和多级队列调度器),允许用户在进行配置时选择其中一个调度器,适应性好。因此在实时性方面表现良好。


    在内存管理上eCos对内存分配既不分段也不分页,而是采用一种基于内存池的动态内存分配机制。通过两种内存池来实现两种内存管理方法:一种是变长的内存池;另一种是定长的内存池,类似于VxWorks的管理方案。


    在中断管理上eCos使用了分层式中断处理机制,把中断处理分为传统的ISR(中断服务程序)和滞后中断服务程序DSR(递延服务程序)。类似于μClinux的处理机制,这种机制可以在中断允许时运行DSR,因此在处理较低优先级中断时允许高优先级的中断和处理。为了极大地缩短中断延时,ISR应当可以快速运行。如果中断引起的服务量少,则ISR可以单独处理中断;如果中断服务复杂,则ISR只屏蔽中断源,然后交由DSR(递延服务程序)处理。


    eCos操作系统的可配置性非常强大,用户可以自己加入所需的文件系统。eCos操作系统同样支持当前流行的大部分嵌入式CPU,eCos操作系统可以在16位、32位和64位等不同体系结构之间移植。eCos由于本身内核就很小,经过裁剪后的代码最小可以为10 KB,所需的最小数据RAM空间为10 KB。


    在系统移植方面 eCos操作系统的可移植性很好,要比μC/OS-II和μClinux容易。


    综上所述,eCos最大特点是配置灵活,并且支持无MMU的CPU的移植,开源且具有很好的移植性,也比较合适于移植到stm32平台的CPU上。但eCOS的应用还不是太广泛,还没有像μC/OS-II那样普遍,并且资料也没有μC/OS-II多。eCos适合用于一些商业级或工业级对成本敏感的嵌入式系统,例如消费电子领域中的一些应用。


    4、FreeRTOS

    由于RTOS需占用一定的系统资源(尤其是RAM资源),只有μC/OS-II、embOS、salvo、FreeRTOS等少数实时操作系统能在小RAM单片机上运行。相对于C/OS-II、 embOS等商业操作系统,FreeRTOS操作系统是完全免费的操作系统,具有源码公开、可移植、可裁减、调度策略灵活的特点,可以方便地移植到各种单片机上运行,其最新版本为6.0版。


    作为一个轻量级的操作系统,FreeRTOS提供的功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能等,可基本满足较小系统的需要。 FreeRTOS内核支持优先级调度算法,每个任务可根据重要程度的不同被赋予一定的优先级,CPU总是让处于就绪态的、优先级最高的任务先运行。 FreeRT0S内核同时支持轮换调度算法,系统允许不同的任务使用相同的优先级,在没有更高优先级任务就绪的情况下,同一优先级的任务共享CPU的使用 时间。


    FreeRTOS的内核可根据用户需要设置为可剥夺型内核或不可剥夺型内核。当 FreeRTOS被设置为可剥夺型内核时,处于就绪态的高优先级任务能剥夺低优先级任务的CPU使用权,这样可保证系统满足实时性的要求;当 FreeRTOS被设置为不可剥夺型内核时,处于就绪态的高优先级任务只有等当前运行任务主动释放CPU的使用权后才能获得运行,这样可提高CPU的运行 效率。


    FreeRTOS的移植:

    FreeRTOS操作系统可以被方便地移植到不同处理器上工作,现已提供了ARM、MSP430、 AVR、PIC、C8051F等多款处理器的移植。FrceRTOS在不同处理器上的移植类似于μC/0S一II,故本文不再详述FreeRTOS的移 植。此外,TCP/IP协议栈μIP已被移植到FreeRTOS上,具体代码可见FreeRTOS网站


    FreeRTOS的不足:

    相对于常见的μC/OS—II操作系统,FreeRTOS操作系统既有优点也存在不足。其不足之处, 一方面体现在系统的服务功能上,如FreeRTOS只提供了消息队列和信号量的实现,无法以后进先出的顺序向消息队列发送消息;另一方 面,FreeRTOS只是一个操作系统内核,需外扩第三方的GUI(图形用户界面)、TCP/IP协议栈、FS(文件系统)等才能实现一个较复杂的系统, 不像μC/OS-II可以和μC/GUI、μC/FS、μC/TCP-IP等无缝结合。


    5、都江堰操作系统(djyos)

    都江堰操作系统,简称djyos,得名于一个伟大的水利工程:都江堰。


    与传统操作系统不同,djyos不是以线程而是以事件为调度核心,这种调度算法使程序员摆脱模拟计算机执行过程编写程序的思维方式,而是按人类认知世界的方式编写应用程序,就如同在嵌入式编程中引入了VC似的。djyos的调度算法使程序员可以摆脱线程和进程的束缚,djyos没有有关线程的api,一个完全不懂线程知识的程序员也可以顺利地在djyos下编写应用程序。


    djyos 操作系统是以事件为核心进行调度的,这种调度策略使程序员可以按人类认知事物的习惯而不是计算机的习惯来编程。


    普通操作系统中,调度是以线程为核心的,事件被作为线程的数据,标榜为“事件触发”的软件模型,也是由线程在一旁候着,待特定事件发生时线程恢复运行并把它作为输入数据加以处理。


    以事件为核心的调度,则像设备和内存一样,把线程虚拟机作为处理事件所需要的资源看待,当某事件需要处理时,分配或者创建一个线程虚拟机给该事件,并启动该线程虚拟机处理事件。


    djysiV0.4.2发布,增加stm32版本的支持,能够移植到cortex-m3 上(芯片为 stm32f103 )。该系统适合于工业控制。系统源代码开放,但并不是永久免费。


    由上所述,对于stm32f103来说,移植μC/OS-II、eCos、FreeRTOS、都江堰操作系统是合适的。

    展开全文
  • 最开始想做一些DIY的开发,...后来发现主流的嵌入式控制用的都是STM32单片机,于是转而开始学习STM32,发现学起来与51单片机完全不同,你不需要了解寄存器(基于固件库);开发如同软件开发一样,STM32的固件库就...

    最开始想做一些DIY的开发,了解到工控,工控用到的控制器大概分为以下两种:1)PLC,2)单片机,下面我对两种做了一下简单对比:

    如上我选了单片机做开发,刚开始用的51单片机,虽然入手简单,但是功能略显单薄;后来发现主流的嵌入式控制用的都是STM32单片机,于是转而开始学习STM32,发现学起来与51单片机完全不同,你不需要了解寄存器(基于固件库);开发如同软件开发一样,STM32的固件库就像软件的API一样好用,调用设置然后开发就可以。

    下面对STM32做一下简介:

    首先STM32分为很多系列,其系列如下:

    如上F系列为通用型号,L型号为低功耗型号;主流的为F1,F4;我入手学习的是STM32F103;当然F103系列也分好多种类,下面表格为系列符号代表的意思:

    再来个手册上的截图:

    不过也不要太过了解,有个初期的感性了解就可以,到后面用到的多了自然就了解;

    展开全文
  • 关于STM32的四类嵌入式软件(库)

    千次阅读 2019-02-21 20:34:56
    置顶/星标公众号,不错过每一条消息! 关注我的朋友中,初学者比较多,今天就写点基础知识。1写在前面陆续收到一些朋友的问题:1.我是选择寄存器开发STM32,还是标准...
        

    置顶/星标公众,不错过每一条消息!

    640?wx_fmt=png

        关注我的朋友中,初学者比较多,今天就写点基础知识。

    1写在前面

    陆续收到一些朋友的问题:

    1.我是选择寄存器开发STM32,还是标准外设库呢?

    2.你有STM32L0标准外设库吗?

    3.HAL库和LL库有什么差异?

    。。。

    针对STM32开发使用的嵌入式软件,或者我们说的库,可以分为四类:

    • STM32Snippets

    • Standard Peripheral Library

    • STM32Cube HAL

    • STM32Cube LL

    下面就写一下关于这四种库的相关内容、以及对比应用等。


    2

    STM32Snippets

    什么是STM32Snippets?


    STM32Snippets是高度优化的代码示例集合,使用符合CMSIS的直接寄存器访问来减少代码开销,从而在各种应用程序中最大化STM32 MCUs的性能。


    每个STM32系列的100多个片段演示了如何以最小的内存占用有效地使用STM32外围设备。


    地址:

    https://www.st.com/en/embedded-software/stm32snippets.html?querycriteria=productId=LN1898

    640?wx_fmt=jpeg

    STM32Snippets可以理解为我们常说的“寄存器”开发STM32的底层驱动代码

    主要针对的底层开发人员,或者从51转过来,直接操作寄存器开发的人员。 是没有经过封装,可见底层寄存器的一套示例代码。


    STM32Snippets目前官方只提供:STM32F0和L0的示例代码包

    3

    Standard Peripheral Library

    Standard Peripheral Library:简写SPL,也叫标准外设库


    标准外设库相信学习过STM32的朋友都不陌生,是一组外围设备的C语言代码集合。


    标准外设库是在寄存器的基础上进行了一次简单封装,主要是面向过程的嵌入式系统开发人员。


    地址:

    https://www.st.com/en/embedded-software/stm32-standard-peripheral-libraries.html?querycriteria=productId=LN1939

    640?wx_fmt=jpeg

    目前标准外设库支持STM32F0、 F1、 F2、 F3、 F4、 L1, 不支持F7、 H7、 L0、 L4、 G0等系列。


    所以,不要再问:在哪里下载L0的标准外设库了

    4

    STM32Cube HAL 和 LL

    HAL:Hardware Abstraction Layer,硬件抽象层库

    LL:Low-Layer,底层库


    STM32Cube HAL 和 LL配合STM32CubeMX工具对STM32进行开发。


    HAL针对的是具有一定嵌入式基础的开发人员,HAL具有很好的移植性。


    LL库相对HAL,具有简单的结构,针对之前从事SPL,或寄存器开发的人员。


    地址:

    https://www.st.com/stm32cubemx

    640?wx_fmt=jpeg

    最近新增了STM32Cube MP1。


    STM32Cube HAL 和 LL是目前官方重点维护和更新的库,也建议大家都学习一下。而且新出来的型号(如L4、G0等)就只有STM32Cube HAL 和 LL库了。


    5

    四种库对比

    来自官方的对比信息,包含可移植性、优化、难以程度等。

    640?wx_fmt=png

    其中:

    Portability:可移植性

    Optimization :优化

    Easy:难易程度

    Hardware coverage:硬件覆盖


    定位:

    640?wx_fmt=png

    支持器件:

    640?wx_fmt=png

    最近新增了STM32Cube MP1,官方没有统计上。

    库之间的转移:

    640?wx_fmt=png

    本文就到这里,希望以上内容对你有所帮助!

    推荐阅读:

    1.介绍几种ST-Link差异、固件升级的方法和应用

    2.关于PC-lint,以及如何在MDK中添加PC-lint工具

    6最后

    若觉得文章对你有帮助,随手点“好看、转发分享,也是我继续更新的动力。

    扫描下面二维码、关注公众号,在底部菜单中查看更多精彩内容!

    640?wx_fmt=jpeg

    长按识别图中二维码关注

    展开全文
  • 嵌入式stm32

    2019-03-13 15:20:23
    STM系统 SystemInit()系统初始化究竟指的是什么系统
  • 适合STM32的三大嵌入式操作系统

    千次阅读 2019-06-14 17:20:50
    基于STM平台且满足实时控制要求操作系统,有以下5种可供移植选择。分别为μClinux、μC/OS-II、eCos、FreeRTOS和都江堰操作系统(djyos)。下面分别介绍这五种嵌入式操作系统的特点及不足。 1、μClinux μClinux是一...
  • 简单谈谈STM32(一) - 走近嵌入式

    千次阅读 2019-04-30 19:29:27
    新系列准备起航,聊聊入门的那些“坑”,聊聊我们应该怎么走近嵌入式这个陌生而又熟悉的方向,让我们从入门到喜欢,而不是放弃。本系列不能代替教程,该看教程还是老老实实看看教程,遇到想不懂了,可以尝试在这个...
  • 不过没有关系我们发烧友专注于在快乐中学习,要学习STM32,我们首先了解下五大嵌入式操作系统:μClinux、μC/OS-II、eCos、FreeRTOS和RT-thread。 本文引用地址: ...
  • 嵌入式STM32开发环境之Keil5的安装(附资源)

    万次阅读 多人点赞 2018-07-12 13:20:19
    准备安装包至少需要准备好三个包,Keil uVision5主程序,对应的STM32芯片支持包,以及 Keil 注册机(1)Keil uVision5主程序链接:https://pan.baidu.com/s/1MKUieWkIWYCgIgFYpDOhbg 密码:xwpa(2)STM32芯片支持包A....
  • 嵌入式STM32建立工程的详细步骤

    千次阅读 2018-06-21 09:24:46
    创建工程步骤:1、 在硬盘上创建工程目录Project,(cm3、Startup、STM32F10x_StdPeriph_Driver、Users)添加到Project文件夹下,再创建一个Mdk文件,在Mdk下再创建一个Output和Listing文件夹。目录结构如上图左栏...
  •   在博主还是大学萌新的时代,在搞STM32方面的学习和调教是使用的都是Keil 5这个神器。   STM32CubeMX+STM32CubeIDE+STM32CubeProgrammer =STM32开发三驾马车。
  • 本教程主要给大家谅解了嵌入式stm32开发 心率检测仪的设计与实现,需要的朋友们可以下载来看看,作为参考! 项目描述:通过心律传感器采集我们的心律数据,然后通过串口传送到上位机中,上位机用Qt实现,当Qt接收...
  • 写pwm波函数可以调用stm32固件库函数直接生成,也可以通过中断来写pwm波;下面就介绍这两种方法,这里先说一下呼吸灯,其原理就是让LED灯由暗变亮再由亮变暗循环,类似呼吸的效果,亮-暗是一个大周期,而LED灯亮或暗...
  • 继续来更新嵌入式这个系列,再说一遍,这个系列我一般都会使用寄存器来编写,具体原因: 一、相比于库函数来说寄存器比较难编写,得具体根据芯片手册来编写。 二、能够通过寄存器的形式来让大家更加的清楚每一行代码...
  • 1.位操作就是单独的对一个比特位进行读或者写操作,这个在51单片机中非常常见,51单片机通过关键字sbit来实现位定义,但是我们在cortex-m芯片中没有关键字这个操作,例如stm32f4xx系列。 2.在f4系列中,有两个地方...
  • 问题1:Error[Li006]: ... in “C:\Users\moon\Desktop\IAR–practice\test5(LCD)\test5–yejing\EWARM\STM32F4xx-Nucleo\Obj\lcd.o”, and “C:\Users\moon\ 今天在进行代码测试编译时出现了重复定义的错误,提示在
  • 这里直接开始码代码了,至于前期的准备工作比如配置MDK-keil,或配置...2)板子:STM32F103C8T6核心板,如下: 3)下载器:ST-LINK/V2仿真下载器; 4)板子上LED对应的引脚是GPIOC, GPIO_Pin_13;在IAR对应的st...
  • LED流水灯程序初始化流程 [cpp]view plaincopy //1.定义结构体变量 GPIO_InitTypeDefGPIO_InitStructure; //2.开启GPIOC的外部时钟,不同的外设开启不同的时钟,...RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC...
  • 蓝桥杯之嵌入式STM32F103RBT6教程及常见问题 蓝桥杯stm32嵌入式开发板如图所示: 一、基本的硬件、软件连接问题以及编译问题: 一、电脑显示USB无法识别stm32开发板,如下图所示 ** 原因是USB插反了: 正确连接...
  • 嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可cai剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。 总结,留存资源
1 2 3 4 5 ... 20
收藏数 23,324
精华内容 9,329
关键字:

嵌入式stm32