STM32学习心得(1)

学STM32的目的只是为了可以让一个电机转动起来,哈哈哈是不是感觉没什么大目标。但是能让电机转起来就觉得很有成就感。

我在学之前有的概念就是:PWM,CAN,输入输出啥的,然而却并不知道是干什么的。

前一段时间在淘宝上买了一款STMF103的板子,买回来后装了keil4花了好几个小时,又花了好几个小时配置了一下keil,然后按教程烧了一下LED灯的工程。看着LED灯闪烁,还是很有成就感的,虽然代码基本没怎么看懂,因为还不是很懂位,十六进制。对于GPIO也不太懂。不过点灯应该就是输入高低电平。

后来接触了蜂鸣器,就是会叫的那个元器件,还会唱歌,葫芦娃,葫芦娃,葫芦娃 。核心就是delay函数,给延迟发声。

//上main.c的代码
#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
#include "key.h"
#include "timer.h"
#include "beep.h"

uint8_t BeepFlag=1;

int main(void)
{
	int i;
	LED_Init();//LED初始化
  KEY_Init();//按键初始化
  SysTick_Init();//延时初始化
	BEEP_Init();   //蜂鸣器初始化
	TIM2_Base_Init(1000);//10Khz的计数频率,计数到100为100ms
  for(i=0;i<=0;i++)
	{
		Delay_ms(250);		  
		LED2_REV;		
	}
}

void TIM2_IRQHandler(void)   //TIM2中断
{ 
	static uint8_t i;
	if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM中断源
		{
		TIM_ClearITPendingBit(TIM2, TIM_IT_Update  );  //清除TIMx的中断待处理位:TIM中断源
		if(BeepFlag)	
		   BEEP_REV; //取反蜂鸣器
		else
			 BEEP_OFF;
		i++;
		if(i==100)
		{
			BeepFlag=!BeepFlag;
			LED3_REV;
			i=0;
		}
		}
}

再后来接触了舵机,舵机是那种可以旋转180度的。控制上就是用PWM,改变占空比,就可以实现控制舵机的转动。

//这里只上核心代码
uint32_t value=30800,b;
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){
	   if(htim->Instance==TIM3){
			 if(value==30800) b=150;//理解一下b和value的作用,其实就是占空比,比例嘛
			 if(value==32000) b=-150;
			 value+=b;
			 TIM2->CCR2=value;
			printf("%d\n",value);
		 }
	 }

就可以控制用舵机做的机械爪来抓取东西啦,还是很有成就感的哈哈哈。

现在还在学习,等学到更多的东西再来分享吧。

你可能感兴趣的:(STM32)