按照惯例,所有的Makefile变量都应该是大写。如果变量的值发生变化,就只需要在一个地方修改,从而简化了Makefile的维护。现在利用变量把前面的Makefile重写一遍:除用户自定义的变量外,make还允许使用环境变量、自动变量和预定义变量。需要注意的是,如果用户在Makefile中定义了同名的变量,用户自定义变量将覆盖同名的环境变量。此外,Makefile中还有一些预定义变量和自动变量,但是看起来并不像自定义变量那样直观。......
2023-11-19
STM32F4处理器在使用外部中断前,应通过使用库函数配置外部中断,具体步骤如下:
(1)使能I/O口时钟,初始化I/O口设置为输入模式。
(2)开启SYSCFG时钟,设置I/O口与中断线的映射关系。
首先,配置GPIO与中断线的映射关系,需要打开SYSCFG时钟。需要注意的是,只要使用到外部中断,就必须打开SYSCFG时钟。
然后,配置GPIO与中断线的映射关系。在库函数中,配置GPIO与中断线的映射关系是通过函数SYSCFG_EXTILineConfig()来实现的,例如:
(3)初始化线上中断,设置触发条件等。中断线上中断的初始化是通过函数EXTI_Init()实现的。下面用一个范例来说明这个函数的使用。
上面例子的设置中断线4上的中断为下降沿触发。STM32F4外设的初始化都是通过结构体来设置初始值的。结构体包括4个参数,第1个参数是中断线的标号,对于外部中断,取值范围为EXTI_Line0~EXTI_Line15。这个函数配置的是某个中断线上的中断参数。第2个参数是中断模式,可设为中断模式EXTI_Mode_Interrupt和事件模式EXTI_Mode_Event。第3个参数是触发方式,可以是下降沿触发EXTI_Trigger_Falling、上升沿触发EXTI_Trigger_Rising,或任意电平(上升沿和下降沿)触发EXTI_Trigger_Rising_Falling。第4个参数是中断线使能设置。
(4)配置中断分组(NVIC),并使能中断。
设置好中断线和GPIO映射关系,设置中断的触发模式等初始化参数后,要设置NVIC中断优先级。例如:(www.chuimin.cn)
(5)编写中断服务函数。
配置完中断优先级之后,要做的就是编写中断服务函数。中断服务函数的名称是在MDK中事先有定义的。这里需要说明的是,STM32F4处理器的I/O口外部中断函数只有7个,分别为EXPORT EXTI0_IRQHandler、EXPORT EXTI1_IRQHandler、EXPORT EXTI2_IRQHandler、EXPORT EXTI3_IRQHandler、EXPORT EXTI4_IRQHandler、EXPORT EXTI9_5_IRQHandler、EXPORT EXTI15_10_IRQHandler。中断线0~4每个中断线对应一个中断函数,中断线5~9共用中断函数EXTI9_5_IRQHandler,中断线10~15共用中断函数EXTI15_10_IRQHandler。
在编写中断服务函数的时候会经常用到两个函数,第一个函数是判断某个中断线上的中断是否发生(标志位是否置位),具体如下:
该函数一般使用在中断服务函数的开头判断中断是否发生。
另一个函数是清除某个中断线上的中断标志位,具体如下:
该函数一般应用在中断服务函数结束之前,清除中断标志位。常用的中断服务函数程序编写格式为
这里需要说明的是,固件库还提供了两个函数用来判断外部中断状态及清除外部状态标志位的函数EXTI_GetFlagStatus和EXTI_ClearFlag,它们的作用和前面两个函数的作用类似。只是在EXTI_GetITStatus函数中会先判断这种中断是否使能,使能了才去判断中断标志位,而EXTI_GetFlagStatus直接用来判断状态标志位。
有关嵌入式系统原理及应用:基于ARM Cortex-M4体系结构的文章
按照惯例,所有的Makefile变量都应该是大写。如果变量的值发生变化,就只需要在一个地方修改,从而简化了Makefile的维护。现在利用变量把前面的Makefile重写一遍:除用户自定义的变量外,make还允许使用环境变量、自动变量和预定义变量。需要注意的是,如果用户在Makefile中定义了同名的变量,用户自定义变量将覆盖同名的环境变量。此外,Makefile中还有一些预定义变量和自动变量,但是看起来并不像自定义变量那样直观。......
2023-11-19
外部中断是由外部信号引起的,需要在芯片上设置引入端。中断请求的撤销。中断响应后要及时清除中断请求标志位。定时中断和脉冲方式中断的撤销是自动的,不需要用户干预。若仅有一个中断源或不考虑中断优先控制时,外部中断初始化要设置中断总允许、外中断允许和中断方式三项。寄存器的内容及位地址表示如下:单片机复位后,IE=00H禁止一切中断。......
2023-11-07
内联汇编器使用汇编器说明符进行调用,后面跟用大括号或括号括起来的汇编器指令序列。以使用“__asm”为例,介绍单行和多行内联汇编。下面的例子显示了内联汇编和真正汇编的区别。嵌入汇编函数语法格式如下:在参数列表中允许使用参数名,但不能用在嵌入式汇编函数体内。......
2023-11-19
在Linux系统中,文件系统可以根据需要随时装载。mount-text3/dev/hdal/mnt表示把刚才格式化好的IDE硬盘第一个分区挂载到/mnt目录下,并且指定了分区的文件系统类型是ext3。mount命令通过-t参数指定挂载文件系统的类型,还可以使用-o参数指定与文件系统相关的选项,例如数据的处理方式等。为了保证文件系统的完整性,在关闭文件系统之前,所有挂载的文件系统都必须卸载。umount/mnt表示把挂载在/mnt目录下的文件系统卸载。......
2023-11-19
1.硬件“看门狗”电路硬件实现可以采用带有“看门狗”功能的系统监控芯片,如MAX705/706/813L,其“看门狗”定时器时序如图10-11所示。2.软件“看门狗”由硬件电路实现的“看门狗”技术,可以有效地克服主程序或中断服务程序由于陷入死循环而带来的不良后果。软件“看门狗”技术的基本思路是在主程序中对T0中断服务程序进行监视,在T1中断服务程序中对主程序进行监视,T0中断监视T1中断。......
2023-11-17
Linux统按照文件中数据的特点对文件划分不同的类别,称做文件类型。Linux系统提供了一个file命令用来查看文件的类型,执行file<文件名>即可得到指定文件的类型。目录的第一项是目录本身,以“.”作为目录本身的名称。......
2023-11-19
上面介绍了字符设备驱动程序的重要的数据结构,那么如何设计一个字符设备驱动程序的数据结构?字符设备驱动程序的初始化流程一般可以用如下的过程来表示:定义相关的设备文件结构体[如file_operation()中的相关成员函数的定义]。向内核申请主设备号。内核提供了三个函数来注册一组字符设备编号,这三个函数分别是:alloc_chrdev_region()、register_chrdev_region()和register_chrdev()。所以在一般的字符设备驱动程序中,不会看到对cdev的操作。这里举出字符设备驱动程序的常见的两种编程架构。......
2023-11-19
具体来说,嵌入式系统是以应用为中心、计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。可以这样认为,嵌入式系统是一种专用的计算机系统,作为装置或设备的一部分。通常,嵌入式系统是一个控制程序存储在ROM中的嵌入式处理器控制板。表1.1对比了通用计算机系统与嵌入式系统。......
2023-11-19
相关推荐