这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » liu789_ST L053试用进程帖

共2条 1/1 1 跳转至

liu789_ST L053试用进程帖

菜鸟
2016-01-04 11:09:12     打赏

最近一直都在忙蓝桥杯和期末复习,直到璐璐的邮箱提醒才发现忘了发帖,希望赶上趟。

首先,必须承认,申请的时候没有想到低功耗的程序会和普通版差异会这么大,大部分不能说自己原创。

之前看网上说这块板子是ST公司推出的一款针对STM32L0系列设计的Cortex-M0+开发板,具有 mbed 功能,支持Arduino。同时还提供 ST Morpho 扩展排针,可连接微控制器的所有周边外设。

实物图



先是最基础的定时器,毕竟,时钟的第一功能是记时嘛


#include "LED.h"

/*
 * 函数名:LED_GPIO_Config
 * 描述  :配置LED用到的I/O口
 * 输入  :无
 * 输出  :无
 */
void LED_GPIO_Config(void)
{
/*定义一个GPIO_InitTypeDef类型的结构体*/
GPIO_InitTypeDef GPIO_InitStructure;

/*开启GPIOC的外设时钟*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

/*选择要控制的GPIOC引脚*/   
     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;

/*设置引脚模式为通用推挽输出*/
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   

/*设置引脚速率为50MHz */   
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 

/*调用库函数,初始化GPIOC*/
     GPIO_Init(GPIOA, &GPIO_InitStructure);
 
    /*PA.8 输出高*/
     GPIO_SetBits(GPIOA,GPIO_Pin_8);   


RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);   

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;      
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_SetBits(GPIOD,GPIO_Pin_2);  

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);   

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;      
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_SetBits(GPIOC,GPIO_Pin_12);


}
这样呢,就算是第一步了,当然也少不了液晶的操作


#include "lcd.h"
#include "stdlib.h"
#include "usart1.h"
 

  
 
//画笔颜色,背景颜色
u16 POINT_COLOR,BACK_COLOR=WHITE;  

//写16位数据函数
void LCD_WR_DATA(u16 data)
{
LCD_RS_SET;
LCD_CS_CLR;
DATAOUT(data);
LCD_WR_CLR;
LCD_WR_SET;
LCD_CS_SET;


/*****************************************************************************
** 函数名称: LCD_RD_DATA
** 功能描述: 写寄存器函数
** 返回值:读到的值
*****************************************************************************/  
void LCD_WR_REG(u8 data)

LCD_RS_CLR;//写地址  
  LCD_CS_CLR; 
DATAOUT(data); 
LCD_WR_CLR; 
LCD_WR_SET; 
  LCD_CS_SET;   
}


 
/*****************************************************************************
** 函数名称: LCD_RD_DATA
** 功能描述: 读LCD数据
** 返回值:读到的值
*****************************************************************************/  

u16 LCD_RD_DATA(void)
{   
u16 t;

  LCD_GPIOB_Configuration(0);
LCD_RS_SET;
LCD_CS_CLR;
//读取数据(读寄存器时,并不需要读2次)
LCD_RD_CLR;   
LCD_RD_SET;
t=DATAIN;  
LCD_CS_SET; 
  LCD_GPIOB_Configuration(1);
  return t;  
}
/*****************************************************************************
** 函数名称: LCD_WriteReg
** 功能描述: 写寄存器
** LCD_Reg:寄存器编号
** LCD_RegValue:要写入的值
*****************************************************************************/  

void LCD_WriteReg(u8 LCD_Reg, u16 LCD_RegValue)
{
LCD_WR_REG(LCD_Reg);  
LCD_WR_DATA(LCD_RegValue);      
}   


//开始写GRAM
void LCD_WriteRAM_Prepare(void)
{
LCD_WR_REG(0x22);
}  

/*****************************************************************************
** 函数名称:LCD_DisplayOn
** 功能描述: 开启LCD显示
*****************************************************************************/  

void LCD_DisplayOn(void)
{
LCD_WriteReg(0x07,0x0173); //开启显示
}

/*****************************************************************************
** 函数名称: LCD_DisplayOff
** 功能描述: 关闭LCD显示
*****************************************************************************/  
void LCD_DisplayOff(void)
{   
LCD_WriteReg(0x07, 0x0);//关闭显示 
}   



//设置光标位置
//Xpos:横坐标
//Ypos:纵坐标
void LCD_SetCursor(u16 Xpos, u16 Ypos)
{
if(Horizontal_or_Vertical)
{
//横屏显示
LCD_WriteReg(0x20,Ypos);
LCD_WriteReg(0x21,319-Xpos);
}
//竖屏显示   
else
{
 LCD_WriteReg(0x20, Xpos);
LCD_WriteReg(0x21, Ypos);
}

}



/*****************************************************************************
** 函数名称: LCD_Scan_Dir
** 功能描述: 设置LCD的自动扫描方向
*****************************************************************************/  
void LCD_Scan(void)
{
u16 regval=0;
  regval|=L2R_U2D; //从左到右,从上到下
regval|=1<<12;  
LCD_WriteReg(0X03,regval);


/*****************************************************************************
** 函数名称: LCD_DrawPoint
** 功能描述: 画点
** x:0~239
** y:0~319
** POINT_COLOR:此点的颜色
*****************************************************************************/


void LCD_DrawPoint(u16 x,u16 y,u16 Color)
{
LCD_SetCursor(x,y);//设置光标位置 
LCD_WriteRAM_Prepare(); //开始写入GRAM
LCD_WR_DATA(Color); 



/*****************************************************************************
** 函数名称: LCD_GPIO_Configuration
** 功能描述: LCD_IO口配置
*****************************************************************************/
void LCD_GPIO_Configuration(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO, ENABLE); 
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_9|GPIO_Pin_8|GPIO_Pin_7|GPIO_Pin_6;   //GPIO_Pin_10
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure); //GPIOC

GPIO_SetBits(GPIOC,GPIO_Pin_10|GPIO_Pin_9|GPIO_Pin_8|GPIO_Pin_7|GPIO_Pin_6);


GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; //  
GPIO_Init(GPIOB, &GPIO_InitStructure); //GPIOB

GPIO_SetBits(GPIOB,GPIO_Pin_All);
 }


/*****************************************************************************
** 函数名称: LCD_GPIOB_Configuration
** 功能描述: lcd数据传输用到的IO配置
*****************************************************************************/

void LCD_GPIOB_Configuration(u8 sel)
{
  GPIO_InitTypeDef GPIO_InitStructure;
if(sel==1)
{
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; //  
GPIO_Init(GPIOB, &GPIO_InitStructure); //GPIOB

GPIO_SetBits(GPIOB,GPIO_Pin_All);
}
else 
{
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;  //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; //  
GPIO_Init(GPIOB, &GPIO_InitStructure); //GPIOB
}
}

 void LCD_Configuration(void)
{
LCD_GPIO_Configuration();
  LCD_WriteReg(0x0000,0x0001);//可以去掉
    LCD_WriteReg(0x00E5,0x78F0); 
LCD_WriteReg(0x0001,0x0100); 
LCD_WriteReg(0x0002,0x0700); 
LCD_WriteReg(0x0003,0x1030); 
LCD_WriteReg(0x0004,0x0000); 
LCD_WriteReg(0x0008,0x0202);  
LCD_WriteReg(0x0009,0x0000);
LCD_WriteReg(0x000A,0x0000); 
LCD_WriteReg(0x000C,0x0000); 
LCD_WriteReg(0x000D,0x0000);
LCD_WriteReg(0x000F,0x0000);
//power on sequence VGHVGL
LCD_WriteReg(0x0010,0x0000);   
LCD_WriteReg(0x0011,0x0007);  
LCD_WriteReg(0x0012,0x0000);  
LCD_WriteReg(0x0013,0x0000); 
LCD_WriteReg(0x0007,0x0000); 
//vgh 
LCD_WriteReg(0x0010,0x1690);   
LCD_WriteReg(0x0011,0x0227);
//delayms(100);
//vregiout 
LCD_WriteReg(0x0012,0x009D); //0x001b
//delayms(100); 
//vom amplitude
LCD_WriteReg(0x0013,0x1900);
//delayms(100); 
//vom H
LCD_WriteReg(0x0029,0x0025); 
LCD_WriteReg(0x002B,0x000D); 
//gamma
LCD_WriteReg(0x0030,0x0007);
LCD_WriteReg(0x0031,0x0303);
LCD_WriteReg(0x0032,0x0003);// 0006
LCD_WriteReg(0x0035,0x0206);
LCD_WriteReg(0x0036,0x0008);
LCD_WriteReg(0x0037,0x0406); 
LCD_WriteReg(0x0038,0x0304);//0200
LCD_WriteReg(0x0039,0x0007); 
LCD_WriteReg(0x003C,0x0602);// 0504
LCD_WriteReg(0x003D,0x0008); 
//ram
LCD_WriteReg(0x0050,0x0000); 
LCD_WriteReg(0x0051,0x00EF);
LCD_WriteReg(0x0052,0x0000); 
LCD_WriteReg(0x0053,0x013F);  
LCD_WriteReg(0x0060,0xA700); 
LCD_WriteReg(0x0061,0x0001); 
LCD_WriteReg(0x006A,0x0000); 
//
LCD_WriteReg(0x0080,0x0000); 
LCD_WriteReg(0x0081,0x0000); 
LCD_WriteReg(0x0082,0x0000); 
LCD_WriteReg(0x0083,0x0000); 
LCD_WriteReg(0x0084,0x0000); 
LCD_WriteReg(0x0085,0x0000); 
//
LCD_WriteReg(0x0090,0x0010); 
LCD_WriteReg(0x0092,0x0600); 

LCD_WriteReg(0x0007,0x0133);
LCD_WriteReg(0x00,0x0022);//

}

/*****************************************************************************
** 函数名称: LCD_Init
** 功能描述: LCD初始化
*****************************************************************************/
void LCD_Init(void)
{  

LCD_Configuration();
LCD_Scan();  
LCD_LED;//点亮背光  
LCD_Clear(WHITE);
}    

/*****************************************************************************
** 函数名称: LCD_Clear
** 功能描述: 清屏幕函数
** Color:要清屏的填充色
*****************************************************************************/

void LCD_Clear(u16 Color)
{
u32 index=0;      
LCD_SetCursor(0x00,0x0000);//设置光标位置 
LCD_WriteRAM_Prepare();     //开始写入GRAM  
for(index=0;index<76800;index++)
{
LCD_WR_DATA(Color);    
}

即便这样其实还有功能都没有实现,实在惭愧,但是在寒假里,会通过对c51的充分学习,方便自己更深入的了解stm32的秘密。谢谢。








助工
2016-01-04 17:19:29     打赏
2楼
楼主棒棒哒~也可以把参赛项目展示一下呦~

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]