在“嵌入式学习006_Systick使用(一)”中,详细介绍了Systick中寄存器的使用方法,用到了很多函数,实际上到了3.5版本的标准固件库中,移除了相关驱动函数,用户必须调用CMSIS.h中定义的函数,其中CMSIS只提供了一个Systick设置的函数,替代了STM32原来有的所有的驱动函数,这样做的目的,可能是简化Systick 的设置,可是降低了用户对SysTick的可控性。
在CMSIS中提供的函数是SysTick_Config(uint32_t ticks); 该函数设置了自动重载入计数器(LOAD)的值,SysTick IRQ的优先级,复位了计数器(VAL)的值,开始计数并打开SysTick IRQ中断。SysTick时钟默认使用系统时钟。
其中这个函数定义在Core_cm3.h中 ,源代码如下所示:
static __INLINE uint32_t SysTick_Config(uint32_t ticks)
{
if (ticks 》 SysTick_LOAD_RELOAD_Msk)return (1);
SysTick-》LOAD= (ticks & SysTick_LOAD_RELOAD_Msk) - 1;
NVIC_SetPriority (SysTick_IRQn, (1《《__NVIC_PRIO_BITS) - 1);
SysTick-》VAL= 0;
SysTick-》CTRL= SysTick_CTRL_CLKSOURCE_Msk |
SysTick_CTRL_TICKINT_Msk|
SysTick_CTRL_ENABLE_Msk;
return (0);}
从上面的函数中可以看出,这个函数把Systick的初值,中断优先级,使能中断,开启定时器都完成了。大大简化了程序。
其中ticks 代表的是初值。例如系统时钟是72Mhz 那么要产生1ms的时基,那么我们可以这样去写。
SysTick_Config(SystemCoreClock/1000);当然也可以写成:SysTick_Config(72000);
了解了这些,我们可以用它来做一个简单的延时函数delay_ms(u16 time);
代码如下:
void delay_ms(u16 time)
{
nTime=time ;/nTime 是个全局变量 可设 extern u16 nTime;/
while(nTime);
}
在中断函数中直接加入nTime--;
在主函数 初始化过程中 加入SysTick_Config(72000);
关键字:STM32 单片机
引用地址:
STM32单片机Systick函数的使用方法
推荐阅读最新更新时间:2024-11-12 20:27
基于单片机的智能点火控制系统设计
智能点火控制装置在冶金行业有着非常广泛的应用,主要运用在轧钢退火炉、环形炉、罩式炉等方面,但现在用于冶金行业点火控制装置存在一定的缺陷,点火控制时间是根据现场生产环境固定设计,但不同生产工艺对点火时间的控制有着不用的要求。 本实用新型智能点火控制装置可以控制点火时间,确保在点火时按一定的程序逐次实现点火过程,同时可随时修改控制参数,方便不同生产工艺的使用,以保证点火过程顺利而安全的完成。在点火装置使用的过程中,使用紫外线(UV)传感器来适时检测火焰,且当加热炉无火时,软件会报警,如果软件报警失效,一定延时后硬件电路报警,这样的双保护确保了整个点火控制装置在使用时更加安全可靠。 1 系统设计 1.1 系统总体框图 系统总
[单片机]
基于P89LPC936微控制器和Q2406B模块实现远程IAP功能系统的设计
引 言 针对地下水资源已经严重透支,水资源受到严重破坏的问题设计本系统,目的就是为了监控农用机井的用水情况。农用机井分布站点广,站点之间距离几十m到一两百km,采用人工抄表监控会浪费大量的人力和物力,而且实时性差。以前采用GSM方式也存在实时性差、控制困难的问题。 目前,对此类问题可靠的、现实的解决方案就是,将现场设备接入Internet上的服务器,在上层实现实时监控、管理;但是现场没有专门Internet接入点和设备。采用GPRS接入Internet进行远程数据传输,是近两年企业、研究所等科研机构的热门课题。随着GPRS技术的日益成熟,GPRS已经成功地应用在远程抄表、夜灯照明、油田监测、自动测量、智能仪表等不方便甚至根本不
[单片机]
STM32外部中断使用注意事项
stm32尽管所有的gpio都可以设置为外部中断的功能,但是不能把所有的gpio同时设置为外部中断。例如不能把PA0和PB0同时设置为外部中断,因为PA0和PB0共用一个中断线,MCU只把最后完成初始化的管脚设置为外部中断。 如果代码编写者明确知道PA0和PB0不会同时触发,并且触发有相互依赖关系,可以通过分时设置PA0和PB0的外部中断功能。但是在大多数情况下,外部中断的触发都是随机的,那么在设计原理图的时候就要考虑到这种情况,把用到的外部中断管脚设置到后缀不同的管脚上,如PA0,PA1,PB3,PC8,....PD12,PF16,在一个工程中最多能使用16个外部中断,并且每个管脚的后缀不同。 如果设计电路板没有考虑到这种情况,
[单片机]
PIC单片机温感器DS18B20 C语言程序代码
/*温感器 此为自已写的,已修正时序,自测过延时时间 采用天祥温度转换模块算法 */ #include pic.h __CONFIG(0X3B31); #define uint unsigned int #define uchar unsigned char #define DQ RC1 #define DQ_DIR TRISC1 #define DQ_HIGH() TRISC1=1 #define DQ_LOW() DQ=0;TRISC1=0 unsigned char shi; //整数十位 unsigned char ge; //整数个位 unsigned char shifen; //十
[单片机]
单片机C语言程序设计:外部 INT0 中断控制 LED
/* 名称:外部 INT0 中断控制 LED 说明:每次按键都会触发 INT0 中 断,中断发生时将 LED 状态取反,产 生 LED 状态由按键控制的效果 */ #include reg51.h #define uchar unsigned char #define uint unsigned int sbit LED=P0^0; // 主程序 void main() { LED=1; EA=1; EX0=1; IT0=1; while(1); }
[电源管理]
FlyMCU下载hex到STM32
习惯了使用ST-LINK,但也避免不免不了使用hex,故记录下载步骤。 一般情况下如果我们想用用串口下载代码,则必须配置BOOT0为1, BOOT1为0!!! 另外,BOOT1,启动选择配置引脚(仅上电时用,过后可配置为输出状态) 1)用户闪存 = 芯片内置的Flash。 2)SRAM = 芯片内置的RAM区,就是内存啦。 3)系统存储器 = 芯片内部一块特定的区域,芯片出厂时在这个区域预置了一段Bootloader,就是通常说的ISP程序。这个区域的内容在芯片出厂后没有人能够修改或擦除,即它是一个ROM区。 Step1、 双击打开软件“FlyMcu” ,点击搜索串口;如果此时控制电路通过 USB已经连接到电脑,则
[单片机]
STC89C52单片机 数码管动态显示
数码管动态显示 静态与动态显示 动态显示 动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余晖和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。 数组的定义与引用 数组是一组有序数据的集合,数组中每一个数据都是同一数据类型。数组中的元素可以用数组名和下标来唯一确定。 数组的一般格式定义如下: 数据类型 数组名 = {元素表}; 例如: unsigned char tabel = ; P0 = tabel ; // P0此时的值为0x3F 数码管动态显示数字 123 #inc
[单片机]
GD32 MCU机械按键状态的识别
GPIO口的输入功能-机械按键状态的识别 硬件: 深圳标航科技有限公司 暴风 开发板 处理器:GD32F103VET6 开发环境:MDK(keil 5) + STM32CubeMX 1.1 GPIO口的输入的作用 输入,其意是指将处理器外部的逻辑信号0或者1输入到处理器的内部。输入是每一个处理器的IO引脚的基本功能。利用处理器的输入功能我们可以获取外部电路的状态,进而做出进一步的判断。GPIO的输入功能的典型应用是获取机械按键的状态—判断按键是按下还是弹起。 1.2 机械按键状态的识别 1.2.1 机械按键电路的设计 按键有两个状态,一个是按下一个是弹起。通过巧妙的电路设计,会使得按键的按下与弹起时IO引脚的逻辑电平不一样。通
[单片机]