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