备战电赛---赛前:准备篇

板子选型:STM32F103ZET6

写代码不易,如需要请关注微信公众号Tech云   回复  备战电赛STM32库  即可获得

或者移步:https://download.csdn.net/download/qq_38351824/12374407

注意:7天内有效!

一、5个串口备用(包括printf函数scanf函数getchar函数等):

其中包括例程

接线方式	
/***********************************************	
		串口      TX       RX
		USART1    A9       A10
		USART2    A2       A3
		USART3    B10      B11
		UART4     C10      C11
		UART5     C12      D2	
************************************************/
/***开启---USART_ON***/   /***关闭---USART_OFF***/
#define  USART1_switch      USART_ON   //默认开启
#define  USART2_switch      USART_OFF  //默认关闭
#define  USART3_switch      USART_OFF  //默认关闭
#define  USART4_switch      USART_OFF  //默认关闭
#define  USART5_switch      USART_OFF  //默认关闭

/* printf函数scanf函数getchar函数使用串口设置:默认为串口1 */

#define	 Choose_USARTx     USART1  //可填   USART1 USART2  USART3  UART4  UART5

     /***   波特率设置:默认为115200  ***/
#define  DEBUG_USART1_BAUDRATE           115200   //若使用蓝牙,请注意两者一致
#define  DEBUG_USART2_BAUDRATE           115200   //若使用蓝牙,请注意两者一致
#define  DEBUG_USART3_BAUDRATE           115200   //若使用蓝牙,请注意两者一致
#define  DEBUG_USART4_BAUDRATE           115200   //若使用蓝牙,请注意两者一致
#define  DEBUG_USART5_BAUDRATE           115200   //若使用蓝牙,请注意两者一致
     /***   串口中断设置:默认为关闭状态  ***/
#define  usart_nvic       0

/* USART_TypeDef * pUSARTx    可填   USART1 USART2  USART3  UART4  UART5 */
/* PS:1
		//此方法默认串口1
	  printf("此方法默认串口1");
		//向串口1发送一个字符
		Usart_SendByte( USART1,'w');
		//向串口1发送字符串
		Usart_SendString( USART1,"这是一个串口中断接收回显实验\n");
		//向串口1发送16位数
		Usart_SendHalfWord( USART1,0x23);		
*/
/* PS:2
		scanf("%c",&cha);                //等待串口1输入数据
		printf("接收到字符:%c\n",cha);  //将串1发来的数据接收 
*/
/* PS:3
	  sha=getchar();                  //接收数据
    printf("接收到字符:%c\n",sha); //将接收到的数据发回去  
*/
/* PS:4
	  sha=getchar();                  //接收数据
    printf("接收到字符:%c\n",sha); //将接收到的数据发回去  
*/
extern void Usart_SendByte( USART_TypeDef * pUSARTx, uint8_t ch);      //发送一个字符
extern void Usart_SendString( USART_TypeDef * pUSARTx, char *str);     //发送字符串
extern void Usart_SendHalfWord( USART_TypeDef * pUSARTx, uint16_t ch); //发送16位数

extern uint8_t Usart_Sum_rec( USART_TypeDef * pUSARTx);   //接收到数据
extern uint8_t rev;	   //通过串口接收到的数据
/* PS:5
			if(Usart_Sum_rec( USART2 ))   //如果接收到了数据
			printf("%c", rev);            //那么打印数据
			
	//注意:数据接收到的数据都储存在rev这个变量中

二、OLED显示(包括字符显示函数、图片显示函数、数字显示函数等):

其中包括例程

/
 /**
  * @brief  OLED显示代码
  * @author Sumjess
  * @retval 
	  @PS     
  */
///	
//  引脚连接  /
//	D0   接PG15(SCL)
//	D1   接PG14(SDA)
//	RES  接PG13
//	DC   接PG12
//	CS   接PG11    	
//

//清屏函数,清完屏,整个屏幕是黑色的!和没点亮一样!!!	
extern void OLED_Clear(void);   //清屏:清空屏幕
//在指定位置显示一个字符,包括部分字符
//x:0~127
//y:0~63
//mode:0,反白显示;1,正常显示				 
//size:选择字体 16/12 
extern void OLED_ShowChar(uint8_t x,uint8_t y,uint8_t chr);  //显示一个字符
//显示2个数字
//x,y :起点坐标	 
//len :数字的位数
//size:字体大小
//mode:模式	0,填充模式;1,叠加模式
//num:数值(0~4294967295);	 	
extern void OLED_ShowNum(uint8_t x,uint8_t y,uint32_t num,uint8_t len,uint8_t size);   //显示一个数字
//显示一个字符号串 起始点坐标(x,y),x的范围0~127,y为页的范围0~7*
extern void OLED_ShowString(uint8_t x,uint8_t y, uint8_t *p);	//显示字符串 
//画点  点坐标(x,y),x的范围0~127,y为页的范围0~7*
extern void OLED_Set_Pos(unsigned char x, unsigned char y);  //画一个点
//显示汉字   起始点坐标(x,y),x的范围0~127,y为页的范围0~7*
extern void OLED_ShowCHinese(uint8_t x,uint8_t y,uint8_t no); //显示中文 //可参考 https://blog.csdn.net/qq_38351824/article/details/82621675
/***********功能描述:显示显示BMP图片128×64起始点坐标(x,y),x的范围0~127,y为页的范围0~7*****************/
extern void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[]);// 显示图片

/*PS:  程序下载后对照实物,一句一句删减函数,观察不同,进行学习即可。
   	OLED_ShowCHinese(63,3,90);//
		OLED_ShowCHinese(18,0,1);//
		OLED_ShowCHinese(36,0,2);//
		OLED_ShowCHinese(54,0,3);//显示汉字,需要的汉字在OLEDFONT.H中添加
		OLED_ShowCHinese(72,0,4);//
		OLED_ShowCHinese(90,0,5);//
		OLED_ShowCHinese(108,0,6);//
		
		
	  OLED_ShowString(0,3,"1.3' OLED TEST");
		OLED_ShowString(8,2,"sumjess");//x,y,字符号串)
		
	  OLED_ShowString(20,4,"2014/05/01"); //
		
		OLED_ShowString(0,6,"ASCII:");  //
		OLED_ShowString(63,6,"CODE:");  //
		
		
		OLED_ShowChar(48,6,t);//显示ASCII字符	 指定位置显示一个字符,包括部分字符//x:0~127//y:0~63

		t++;
	  if(t>'~')t=' ';
		OLED_ShowNum(103,6,t,3,16);//显示ASCII字符的码值(x,y,数值,数字位数,字体大小) 
			
		delay_ms(1000);
		*/
/

三、4个超声波代码(调用函数直接返回数据):

其中包括例程

/
 /**
  * @brief  超声波代码
  * @author Sumjess
  * @retval 
	  @PS     请勿将障碍物 贴近超声波接收器模块前,即让其距离为零,会卡死程序
  */
///	
//  引脚连接  /
//	     TRIG     ECHO
//       PC2      PB6
//       PC3      PB7
//       PC4      PB8
//       PC5      PB9
//

extern short DistanceRight1(void);   //超声波1数据返回    直接调用即可
extern short DistanceRight2(void);   //超声波2数据返回    直接调用即可
extern short DistanceLeft1(void);    //超声波3数据返回    直接调用即可
extern short DistanceLeft2(void);    //超声波4数据返回    直接调用即可
/*PS:
	printf("D1=%d\n",DistanceRight1());
	delay_ms(100);
	printf("D2=%d\n",DistanceRight2());
	delay_ms(100);
	printf("D3=%d\n",DistanceLeft1());
	delay_ms(100);
	printf("D4=%d\n",DistanceLeft2());
	delay_ms(100);
*/
/

四、5个ADC采集通道:

其中包括例程


/
 /**
  * @brief  ADC数据采集代码
  * @author Sumjess
  * @retval 
	  @PS     
  */
//
//	
//		引脚             返回值获取
//		 F6				 ADC_ConvertedValueLocal[0]
//		 F7				 ADC_ConvertedValueLocal[1]							 
//		 F8				 ADC_ConvertedValueLocal[2]							 
//		 F9				 ADC_ConvertedValueLocal[3]							 
//		 F10			 ADC_ConvertedValueLocal[4]							 
//
	            //在主函数中直接调用即可//
//
/* PS:
			ADC_ConvertedValueLocal[0] =(float) ADC_ConvertedValue[0]/4096*3.3;
			ADC_ConvertedValueLocal[1] =(float) ADC_ConvertedValue[1]/4096*3.3;
			ADC_ConvertedValueLocal[2] =(float) ADC_ConvertedValue[2]/4096*3.3;
			ADC_ConvertedValueLocal[3] =(float) ADC_ConvertedValue[3]/4096*3.3;
			ADC_ConvertedValueLocal[4] =(float) ADC_ConvertedValue[4]/4096*3.3;
					
			printf("\r\n CH0 value = %f V \r\n",ADC_ConvertedValueLocal[0]);
			printf("\r\n CH1 value = %f V \r\n",ADC_ConvertedValueLocal[1]);
			printf("\r\n CH2 value = %f V \r\n",ADC_ConvertedValueLocal[2]);
			printf("\r\n CH3 value = %f V \r\n",ADC_ConvertedValueLocal[3]);
			printf("\r\n CH4 value = %f V \r\n",ADC_ConvertedValueLocal[4]);
*/

/

五、陀螺仪代码:

其中包括例程

/
 /**
  * @brief  陀螺仪代码
  * @author Sumjess
  * @retval 
	* @PS     
  */
///	
//  引脚连接  /
//				SDA 		PB13
//				SCL 		PB14
//				INT     PA11
//				AD0     GND
//	

		//注意使用下列函数时,必须要完成引用,,否则可能会导致返回数据不准确,可在printf那行直接自行修改即可//

/*
	 if ( MPU6050_get()) 
		{
			 inv_execute_on_data();
		 //
		 // 该函数从MPL读取偏置补偿的传感器数据和传感器融合输出。输出的格式如empl_output .c所示。这个函数只需要按主机请求的速率调用。
		 //
			Pitch_value = read_Pitch_from_mpl();
			Roll_value = read_Roll_from_mpl();
			Yaw_value = read_Yaw_from_mpl();
			printf("Pitch_value = %f Roll_value = %f Yaw_value = %f \r\n",Pitch_value,Roll_value,Yaw_value);
		}
*/

/

六、4路电机PWM代码:

/

/**
  * @brief  电机PWM
  * @author Sumjess
  * @retval 
	  @PS     
  */


  PWM1  PWM2   PWM3   PWM4   
    直接写对应的数值即可    


extern void SetMOTORValue(uint8_t PWM1,uint8_t PWM2,uint8_t PWM3,uint8_t PWM4); //设置电机PWM值  0--100 


/

七、舵机控制(基于PCA9685舵机控制板):

此部分由网友提供,笔者简单进行了下封装,本身就很简单。

!!!但是此部分尚未测试,由于模块未到!!!

/

/**
  * @brief  舵机控制
  * @author Sumjess
  * @retval 
	  @PS     
  */
///
///为减少内存的占用,若不使用该部分功能、函数,请将下面改为OFF,默认为ON///	
#define PCA_MG9XX_Switch  ON
///
	
//  引脚连接  /
//				SDA 		PB2
//				SCL 		PB3

#define 		MG9       60      //初始化PWM频率
#define		Angle_init	90      //初始化舵机角度

/*
	函数作用:控制舵机转动;
	参数:1.输出端口,可选0~15;
		    2.起始角度,可选0~180;
		    3.结束角度,可选0~180;
		    4.模式选择,        0 表示函数内无延时,调用时需要在函数后另外加延时函数,且不可调速,第五个参数可填任意值;
					                  1 表示函数内有延时,调用时不需要在函数后另外加延时函数,且不可调速,第五个参数可填任意值;
					                  2 表示速度可调,第五个参数表示速度值;
		    5.速度,可填大于 0 的任意值,填 1 时速度最快,数值越大,速度越小;
!注意事项:模式 0和1 的速度比模式 2 的最大速度大;
*/
extern void PCA_MG9XX(u8 num,u8 start_angle,u8 end_angle,u8 mode,u8 speed) 

/

 

 

 

 

 

 

 

  • 16
    点赞
  • 103
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值