STM32学习笔记0

学习STM32库函数开发的第一天我遇到了延时函数(正点原子自带的延时函数)无法使用的问题,初步认为是时钟的配置出现了问题,然而跟着手册一步步操作还是陷入延时函数死循环的问题,主要是这句代码的判断出问题了
void delay_us(u32 nus)
{		
	u32 ticks;
	u32 told,tnow,tcnt=0;
	u32 reload=SysTick->LOAD;				//LOAD的值	    	 
	ticks=nus*fac_us; 						//需要的节拍数 
	told=SysTick->VAL;        				//刚进入时的计数器值
	while(1)
	{
		tnow=SysTick->VAL;	
		if(tnow!=told)
		{	    
			if(tnow=ticks)break;			//时间超过/等于要延迟的时间,则退出.
		}  
	};
}
这是主函数的代码
#include "main.h"
#include "sys.h"
#include "delay.h"
#include "led.h"
void Delay(__IO uint32_t nCount)
{
while(nCount--){}
}
int main(void)
{
	HAL_Init(); //初始化 HAL 库
	Stm32_Clock_Init(360,25,2,8); //设置时钟,180Mhz
	delay_init(180); //初始化延时函数
	LED_Init(); //初始化 LED while(1)
	while(1)
	{
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET);
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_RESET);
		delay_ms(500);
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET);
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_SET);
		delay_ms(500);
	}
}

最终使用STM32cube进行时钟配置并生成了代码最终解决了延时函数无法调用的问题。目前对32位单片机的学习非常疑惑,虽然之前学习过K60,因为没有数电模电和计算机结构方面的基础初步对32位单片机开发的认识就是不断地去调用别人写的库,感觉除了调用库以外什么都没学到,究竟怎样才能系统地学习单片机呢?

而且还有一个疑问就是我们是应该自己写初始化函数还是有stm32cube来生成初始化的代码,然后功能性的函数就自己写。我们应不应该用别人写的库?怎样科学地写代码?

你可能感兴趣的:(STM32学习笔记0)