2.系统定时器

系统定时器SYSTEM文件夹介绍
1,sys文件夹介绍
sys_nvic_set_vector_table():设置中断向量表地址
sys_intx_enable():开启所有中断
sys_intx_disable():关闭所有中断(但是不包括fault和NMI中断)
sys_wfi_set():执行: WFI指令(执行完该指令进入低功耗状态)
sys_standby():进入待机模式
sys_soft_reset():系统软复位
sys_msr_msp():设置栈顶地址
sys_stm32_clock_init():设置系统时钟
sys_cache_enable():使能I-Cache和D-Cache, 开启D-Cache强制透写


2,deley文件夹介绍
delay_init():初始化系统滴答定时器

void delay_init(uint16_t sysclk) 
{ 
	SysTick->CTRL = 0; 
	HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK_DIV8); //配置CLKSOURCE寄存器置0,8分频
    //计数频率=系统时钟(72M)/8(分频)=9M
	g_fac_us = sysclk / 8; //全局变量,赋值=参数uint16_t sysclk/8,标志这1us的次数
    
}


delay_us():用系统滴答定时器实现微秒延时

void delay_us(uint32_t nus) 
{ 
	uint32_t temp; //定义变量temp
	SysTick->LOAD = nus * g_fac_us; 	/* 时间加载,重装载值一般要-1 */ 
	SysTick->VAL = 0x00; 			/* 清0计数器 */ 
	SysTick->CTRL |= 1 << 0 ; 		/* 开始倒数 */ 
	do 
	{ 
		temp = SysTick->CTRL; 
	} while ((temp & 0x01) && !(temp & (1 << 16))); /* (temp &(1<<16))非0则跳出循环 */

 
	SysTick->CTRL &= ~(1 << 0) ; 		/* 关闭SYSTICK */ 
	SysTick->VAL = 0X00; 			/* 清空计数器 */ 
}

时间 = 计数个数 / 计数频率
while循环条件判断是为0跳出循环
&&操作符:A && B: 如果A和B都是1,则 A&&B整体表达式为真,如果A && B中只要有一个为0,则整体为0.
!取反
A && !B则A固定不变B要为1
temp&0x01只要temp的最低位是1(真),那么结果就是1,反之就是0(假)。
(temp &(1<<16))非0则跳出循环

delay_ms():用微秒延时函数实现毫秒延时

void delay_ms(uint16_t nms) 
{ 
    /* 这里用1000,是考虑到可能有超频应用, 
	 * 比如128Mhz的时候, delay_us最大只能延时1/(128 000 000/8)*2^24=1.048576s
	*/ 
	uint32_t repeat = nms / 1000;	  //大于1s的整数部分
	uint32_t remain = nms % 1000;     //大于1s的小数部分
	while (repeat) 
	{ 
		delay_us(1000 * 1000); 	/* 利用delay_us 实现 1000ms 延时 */ 
		repeat--; 
	} 
	if (remain) 
	{ 
		delay_us(remain * 1000); 	/* 利用delay_us, 把尾数延时(remain ms)给做了 */ 
	} 
}

SysTick,即系统滴答定时器,包含在M3/4/7内核里面,核心是一个24位的递减计数器


测试:魔术棒->Utilities->Settings->Trace->Core Clock:输入系统时钟->仿真->打断点运行延时->看t1变化->->

 

3.usart文件夹介绍
printf函数输出流程:printf()->C标准库->fputc()->->
用户需要根据fputc最终输出的硬件重新定义该函数,此过程称为:printf重定向

printf函数支持:
1,避免使用半主机模式,两种方法:微库法、代码法
半主机模式:就是通过仿真器实现开发板在电脑上的输入和输出
微库法:魔术棒->Target->勾选:Use Micro LIB
2,实现fputc函数



posted @   阿Q熊  阅读(59)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示