其他分享
首页 > 其他分享> > STM32F103学习笔记(十一)

STM32F103学习笔记(十一)

作者:互联网

实验十一 USMART调试组件的使用

在这里插入图片描述
在这里插入图片描述
测试指令:
在这里插入图片描述
测试主函数参考代码:

#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
#include "beep.h"
#include "key.h"
#include "exti.h"
#include "sys.h"
#include "usart.h"
#include "timer.h"
#include "tpad.h"
#include "lcd.h"
#include "usmart.h"
extern u8  TIM5CH1_CAPTURE_STA;		//输入捕获状态		    				
extern u16	TIM5CH1_CAPTURE_VAL;	//输入捕获值	
//LED状态设置函数
void led_set(u8 sta)
{
	LED1=sta;
} 
//函数参数调用测试函数
void test_fun(void(*ledset)(u8),u8 sta)
{
	ledset(sta);
}  	
int main(){
 	u8 x=0;
	u8 lcd_id[12];			//存放LCD ID字符串
	delay_init();	    	 //延时函数初始化	  
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);	 //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
	uart_init(115200);	 	//串口初始化为115200
 	LED_Init();			     //LED端口初始化
	LCD_Init();
	usmart_dev.init(72); 
	POINT_COLOR=RED;
	sprintf((char*)lcd_id,"LCD ID:%04X",lcddev.id);//将LCD ID打印到lcd_id数组。 
  	while(1) 
	{		 
		switch(x)
		{
			case 0:LCD_Clear(WHITE);break;
			case 1:LCD_Clear(BLACK);break;
			case 2:LCD_Clear(BLUE);break;
			case 3:LCD_Clear(RED);break;
			case 4:LCD_Clear(MAGENTA);break;
			case 5:LCD_Clear(GREEN);break;
			case 6:LCD_Clear(CYAN);break; 
			case 7:LCD_Clear(YELLOW);break;
			case 8:LCD_Clear(BRRED);break;
			case 9:LCD_Clear(GRAY);break;
			case 10:LCD_Clear(LGRAY);break;
			case 11:LCD_Clear(BROWN);break;
		}
		POINT_COLOR=RED;	  
		LCD_ShowString(30,40,210,24,24,"Elite STM32F1 ^_^"); 
		LCD_ShowString(30,70,200,16,16,"MY TFTLCD TEST");
		LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");
 		LCD_ShowString(30,110,200,16,16,lcd_id);		//显示LCD ID	      					 
		LCD_ShowString(30,130,200,12,12,"2022/1/17");	      					 
	    x++;
		if(x==12)x=0;
		LED0=!LED0;				   		 
		delay_ms(1000);	
	} 

}


// 实验九 电容触摸按键实验
//	EXTIX_Init();
//	delay_ms(200);
//	LED1=1;
//	LED0=0;
//	TIM3_PWM_Init(899,0);//不分频,PWM频率为72M/900=80kHz
//	u8 dir=1;
//	u16 led0pwm=0;
//	TIM5_Cap_Init(0XFFFF,72-1);	//以1Mhz的频率计数 按照预定最长可以捕获高电平时间为4.2秒
//	u32 temp=0; 
//	TPAD_Init(6);			//初始化触摸按键
//	u8 t=0;
//   	while(1)
//	{					  						  		 
// 		if(TPAD_Scan(0))	//成功捕获到了一次上升沿(此函数执行时间至少15ms)
//		{
//			LED1=!LED1;		//LED1取反
//		}
//		t++;
//		if(t==15)		 
//		{
//			t=0;
//			LED0=!LED0;		//LED0取反,提示程序正在运行
//		}
//		delay_ms(10);
//	}

//实验六 独立看门狗
//	while(1){
//		key=KEY_Scan(0);
//		if(key==2){//key0按下
//			IWDG_ReloadCounter();
//		}
//	}
//	实验五
//	delay_init();
//	uart_init(115200);	 //串口初始化为115200
//	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
//	LED_Init();
//	KEY_Init();
//	EXTIX_Init();
//	LED0=0;
//	while(1){
//		printf("ok/n");
//		delay_ms(1000);
//	}


实验四 串口中断测试
//void My_USART1_Init(){
//	//时钟使能
//	GPIO_InitTypeDef GPIO_InitStructure;//GPIO参初始化的第二个结构体参数
//	USART_InitTypeDef USART_InitStructure;
//	NVIC_InitTypeDef  NVIC_InitStructure;
//	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能GPIOA的时钟
//	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//使能串口1的时钟
//	//GPIO初始化
//	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//设置模式
//	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;//设置引脚
//	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
//	GPIO_Init(GPIOA,&GPIO_InitStructure);//第一个参数为GPIO信息,第二个参数的结构体需要自定义
//	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;//设置模式
//	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;//设置引脚
//	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
//	GPIO_Init(GPIOA,&GPIO_InitStructure);//第一个参数为GPIO信息,第二个参数的结构体需要自定义
//	
//	//串口初始化
//	USART_InitStructure.USART_BaudRate=115200;//设置波特率
//	USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
//	USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;//发送接收同时使能
//	USART_InitStructure.USART_Parity=USART_Parity_No;//设置奇偶校验
//	USART_InitStructure.USART_StopBits=USART_StopBits_1;//设置停止位
//	USART_InitStructure.USART_WordLength=USART_WordLength_8b;//设置字长
//	USART_Init(USART1,&USART_InitStructure);
//	
//	//使能串口
//	USART_Cmd(USART1,ENABLE);
//	
//	//可以不设置中断,但是下面要测试中断,现在主函数设置了中断的优先级
//	//开启需要的中断
//	USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//这里的第二个参数设置接收缓存区非空即中断
//	
//	NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQn;//设置通道,在stm32f10x.h文件里面找到相应的定义
//	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;//设置抢占优先级
//	NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;//设置响应优先级
//	NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//是否开启中断通告
//	NVIC_Init(&NVIC_InitStructure);//中断设置
//	
//	
//}
下面编写中断服务函数
//void USART1_IRQHandler(){
//	//首先判断中断类型
//	u8 rec;
//	if(USART_GetITStatus(USART1,USART_IT_RXNE)){
//	//符合前面定义的中断,可以读取数据
//		rec=USART_ReceiveData(USART1);	
//		USART_SendData(USART1,rec);
//	}
//}

//int main(){
//	LED_Init();
//	delay_init();
//	BEEP_Init();
//	KEY_Init();
//	//中断优先级设置
//	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
//	My_USART1_Init();
//	while(1);
//	
//}


//LED_Init();
//	delay_init();
//	BEEP_Init();
//	KEY_Init();
//	u8 key=0,key0=0,key1=0,key_up=0;
//	u8 mode=1;
//	while(1){
//		//实验三,设置key0按下即灯亮,再按下即灯灭  key1 按下即蜂鸣器响起,再按下即关闭
//		key=KEY_Scan(mode);//设置key_up的模式为不连续
//		if(key==3){
//			key_up+=1;//key_up按下
//			if(key_up%2==0) mode=1;
//			else mode=0;
//		}else if(key==2){
//			key1+=1;//key1按下
//			if(key1%2==0) GPIO_ResetBits(GPIOB,GPIO_Pin_8);//蜂鸣器关闭
//			else GPIO_SetBits(GPIOB,GPIO_Pin_8);//响起
//		}else if(key==1){
//			key0+=1;
//			if(key0%5==0) GPIO_ResetBits(GPIOB,GPIO_Pin_5);//灯亮
//			else GPIO_SetBits(GPIOB,GPIO_Pin_5);//灯灭
//		}

//	}

//		//实验二 蜂鸣器+流水灯显示,灯亮蜂鸣响,灯灭不响
//		GPIO_SetBits(GPIOB,GPIO_Pin_5);
//		GPIO_ResetBits(GPIOB,GPIO_Pin_8);
//		delay_ms(3000);
//		GPIO_ResetBits(GPIOB,GPIO_Pin_5);
//		GPIO_SetBits(GPIOB,GPIO_Pin_8);
//		delay_ms(2000);

//实验一流水灯
//		//设置高电平
//		GPIO_SetBits(GPIOB,GPIO_Pin_5);
//		GPIO_SetBits(GPIOE,GPIO_Pin_5);
//		
//		delay_ms(1000);
//		
//		//设置低电平
//		GPIO_ResetBits(GPIOB,GPIO_Pin_5);
//		GPIO_ResetBits(GPIOE,GPIO_Pin_5);
//		delay_ms(1000);



//void Delay(u32 count)
//{
//u32 i=0;
// for(;i<count;i++);
//}
//int main(void)
//{
// GPIO_InitTypeDef GPIO_InitStructure;
// RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|
//RCC_APB2Periph_GPIOE, ENABLE); //使能 PB,PE 端口时钟
// GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //LED0-->PB.5 端口配置
// GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
// GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO 口速度为 50MHz
// GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化 GPIOB.5
// GPIO_SetBits(GPIOB,GPIO_Pin_5); //PB.5 输出高
// GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //LED1-->PE.5 推挽输出
// GPIO_Init(GPIOE, &GPIO_InitStructure); //初始化 GPIO
// GPIO_SetBits(GPIOE,GPIO_Pin_5); //PE.5 输出高 
// while(1)
//{
// GPIO_ResetBits(GPIOB,GPIO_Pin_5);
// GPIO_SetBits(GPIOE,GPIO_Pin_5);
//Delay(3000000);
//GPIO_SetBits(GPIOB,GPIO_Pin_5);
//GPIO_ResetBits(GPIOE,GPIO_Pin_5);
//Delay(3000000);
//}
//}

标签:STM32F103,十一,Pin,USART,LCD,笔记,Init,InitStructure,GPIO
来源: https://blog.csdn.net/qq_29174429/article/details/122557435