stm32程序设计分为两种(stm32程序结构)
本篇文章给大家谈谈stm32程序设计分为两种,以及stm32程序结构对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、STM32的意思是什么呢?
- 2、为什么aitium designer里面stm32芯片原理图有的是分成2部分
- 3、stm32跟普通的51单片机在程序编写方面有什么区别?
- 4、stm32中断编程要求:2个中断,2个优先级,2个初始化函数
STM32的意思是什么呢?
一、STM32简介
STM32F103器件采用Cortex-M3内核,CPU最高速度达72 MHz。该产品系列具有16KB ~ 1MB Flash、多种控制外设、USB全速接口和CAN。
ST在后续几年陆续推出了Cortex-M0+、Cortex-M4内核的芯片,并进行不断优化。
按内核架构分为不同产品,其中STM32F1系列有:
基本型:STM32F101R6、STM32F101C8、STM32F101R8、STM32F101V8、STM32F101RB、STM32F101VB
增强型:STM32F103C8、STM32F103R8、STM32F103V8、STM32F103RB、STM32F103VB、 STM32F103VE、STM32F103ZE
互联型:STM32F105、STM32F107
二、STM32学习
学STM32嵌入式,从硬件上讲,一方面就是学习接口电路设计,另一方面就是学习汇编和C语言的板级编程。如果从软件上讲,就是要学习基于ARM处理器的操作系统层面的驱动、移植了。硬件的寄存器类的东西还是要能看懂的,掌握基于板级的汇编和C编程。
主要需要学习的有:
基础操作:GPIO操作,串口操作,定时器操作,NVIC和中断,看门狗,DMA操作,ADC操作,SPI接口通信,IIC接口通信,CAN总线通信等。
进阶操作:低功耗操作,STM32时钟树,STM32实现位带特性,STM32启动过程详细分析,环形缓冲期的实现,软件定时器的设计,IO口模拟IIC的实现。
综合应用:STM32-IAP的实现,STM32-DAPLink的实现。
带操作系统的程序学习与开发:可用操作系统分析,rt-thread系统移植与学习,FreeRTOS移植与学习。
为什么aitium designer里面stm32芯片原理图有的是分成2部分
因为芯片引脚太多,一张原理图放不下,所以画成两部分,方便绘图。
另一原因,按功能,引脚号等信息分成不同的部分,有利于原理图的设计,原理图可读性更好。
stm32跟普通的51单片机在程序编写方面有什么区别?
1、库函数不同。由ST厂商推出的STM32系列单片机,ST厂商给了丰富的函数库,可以直接使用库函数,所以比起普通的51单片机在程序编写方面要更加的省时。
2、运行速度不同。普通的51单片机运行速度较慢,特别是双数据指针,而STM32系列单片机最高工作频率可达72MHz。
3、便利程度不同。51单片机的任何器件只需要配置寄存器打开就可以进行编程,而STM32系列单片机则需要先打开对应的时钟,包括开启后打开外部时钟(晶振)才开始工作。
4、资源不同。STM32的内部资源(寄存器和外设功能)较普通的51单片机都要多,基本上接近于计算机的CPU了,所以在程序编写上能有更多的选择。
5、编程语言选择不同。STM32基本不会选择汇编语言了,因为工程量巨大,寄存器太多了,位数也多,而51单片机则多使用汇编语言。至于C语言编程方面的区别就不大了。
参考资料来源:百度百科-stm32
参考资料来源:百度百科-51单片机
stm32中断编程要求:2个中断,2个优先级,2个初始化函数
同学,你的问题需要根据实际的情况来定
比如我们使用外部中断,下面我就结合自己的学习讲讲使用外部中断的一般步骤:
1、初始化对应的GPIO口。假如我们使用的是GPIOB。
(1)首先定义初始化用到的结构体名称。
GPIO_InitTypeDef GPIO_InitStructure;
说明一下:GPIO_InitTypeDef 是stm32给我们定义好的结构,里面有相应的成员变量,我们只需要定义结构体的名称即GPIO_InitStructure,然后配置它的成员。
(2)开启GPIOB的时钟。
开启时钟用到系统为我们提供好的函数
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);
说明:因为我们要复用GPIO口,所以也要开启GPIO口的复用功能时钟RCC_APB2Periph_AFIO;
(3)配置结构GPIO_InitStructure。
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;//选用管脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_IPU;//设置输出模式,改模式是将stm32管脚内部拉高保证处于高电平,并且做输入管脚使用。
(4)这一步设置输入速度的我们可以不要,当GPIO口做输入时,不需要对速度进行配置
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
(5)GPIO_Init(GPIOB, GPIO_InitStructure);//调用初始化函数,将配置应用到GPIOB口中。
2、连接GPIO到EXTI
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource0);//将GPIOB0口连接到EXTI0,可能有些同学就不明白了,为什么是EXTI0,这里简单的说明一下GPIO口如果连接的是0管脚,则对应EXTI0,如果是1管脚则对应EXTI1。
3、配置外部中断的触发方式
EXTI_InitTypeDef EXTI_InitStructure;
EXTI_InitStructure.EXTI_Line=EXTI_Line0;
EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd=ENABLE;
EXTI_Init( EXTI_InitStructure);
4、设置中断优先级寄存器
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//这里我们选择分组2,也就是说给抢占优先级分配两位,给响应优先级分两位
5、配置中断控制寄存器(NVIC)
(1)NVIC_InitTypeDef NVIC_InitStructure;//这一步是给我们的结构体命名,下面是对结构进行配置
(2)NVIC_InitStructure.NVIC_IRQChannel=EXTI0_IRQn;//选择中断类型也就选择外部中断0,这些语句其实stm32都给我们,中断名称在IRQn_Type结构体中为我们定义好了,我们只需要选择一个我们要用的中断就好了,stm32f10xx.h中我们可以找到它。
(3)NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01;//设置抢占优先级。
(4)NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x01;//设置响应优先级。
(5)NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//设置开启中断。可以理解为开启总中断。
(6)NVIC_Init(NVIC_InitStructure);//调用出事换函数,初始化这个中断。
6、最都不要忘记在stm32f10x_it.c中编写中断服务程序。不要忘记,清除中断标志位。
void PPP_IRQHandler(void)
{}
我们在这个函数中写中断程序,PPP意思就是设备。不过同学们要记住我们不能直接就在里面写我们要将PPP写该成我们的中断口,void EXTI0_IRQHandler(void) {}
这样才可以,课能同学又要问了怎样确定这个名称呢。
答案是我们要在stm32的启动文件startup_stm32f1xx.s这个汇编文件中找,就可以找到每个中断所对应的名称了。
慢慢学 其实没有我们想象的那么难
关于stm32程序设计分为两种和stm32程序结构的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。