收到开发版一顿激动,立即搜索开发工具。
cdk-windows-V2.8.7-20210507-1704 开发环境
upgrade_tools_v1.4.8 下载工具
1.第一步下载了一个点灯标准程序,顺利点亮流水灯,这个已经有坛友发了。
给我的感觉和STM32cubemx开发的一个样。代码大小写都一样。
2.进入主题直接把手上的SPI 12864点阵液晶焊上,修改一下原来的STM32的程序,直接复制主函数文件,代码见下。
#include
#include "wm_hal.h"
void Error_Handler(void);
static void GPIO_Init(void);
static volatile uint8_t key_flag = 0;
//================写命令=======================
void LcdSt7565_WriteCmd(uint8_t cmd)
{ uint8_t i,j;
//check_busy();
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,0);
//LCD_CS = 0; //chip select,打开片选
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,0);
//LCD_RS = 0; //select command,选择命令
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,0);
//LCD_SCK = 0;
for(i=0;i<8;i++)
{ j=cmd;
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,0);
//LCD_SCK = 0; //disable read,读失能
if(cmd&0x80)HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,1);
else HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,0);
//LCD_SDA=cmd & 0x80;//同上两段代码
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,1);
//LCD_SCK = 1;
cmd=j<<1;
}
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,1);
//LCD_CS = 1;
// _nop_();//缺少源码
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,1);
//LCD_RS = 1;
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0, 1);
//LCD_SDA=1;
}
//===================写数据(显示数据)=========================
void LcdSt7565_WriteData(uint8_t dat)
{ // check_busy();
uint8_t i,j;
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,1);
//LCD_RS = 1; //select data,选择数据
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,0);
//LCD_CS = 0; //chip select,打开片选
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,0);
//LCD_SCK = 0;
for(i=0;i<8;i++)
{
j=dat;
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,0);
//LCD_SCK = 0;
if(dat&0x80)HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0, 1);
else HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,0);
//LCD_SDA = dat & 0x80;
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,1);
//LCD_SCK = 1;
dat=j<<1;
}
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,1);
//LCD_CS = 1;
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,0);
//LCD_RS = 0;
// _nop_();
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,1);
//LCD_RS = 1;
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0, 1);
//LCD_SDA =1;
}
//===========LCD_ST7565初始化=============
void LCD_ST7565_INIT(void)
{ HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3, 1);
//LCD_RST=1;
// _nop_();
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3, 0);
//LCD_RST=0;
//_nop_();
//_nop_();
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3, 1);
//LCD_RST=1;
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,0);
// LCD_CS=0;
//_nop_();
LcdSt7565_WriteCmd(0xE2);//软复位
LcdSt7565_WriteCmd(0xA2);
LcdSt7565_WriteCmd(0x40);//*起始行:第一行开始//40第一行
LcdSt7565_WriteCmd(0xA1); //*列扫描顺序:从左到右0左右1右左
LcdSt7565_WriteCmd(0xC0); //*行扫描顺序:从上到下0上下8下上
//_nop_();
LcdSt7565_WriteCmd(0x2F);//*升压步聚3
//_nop_();
LcdSt7565_WriteCmd(0x26);//*粗调对比度,可设置范围0x20~0x27
LcdSt7565_WriteCmd(0x81); //*微调对比度
LcdSt7565_WriteCmd(0x1e);
//_nop_();
LcdSt7565_WriteCmd(0xAF);/*开显示*/
}
//===========LCD_清12864屏=============
void Lcd12864_ClearScreen(void)
{
uint8_t i, j;
for(i=0; i<8; i++)
{
LcdSt7565_WriteCmd(0xB0+i);
LcdSt7565_WriteCmd(0x10);
LcdSt7565_WriteCmd(0x00);
for(j=0; j<128; j++)
{
LcdSt7565_WriteData(0x14);
}
}
}
int main(void)
{
HAL_Init();
SystemClock_Config(CPU_CLK_160M);
printf("enter mainrn");
GPIO_Init();
LCD_ST7565_INIT();
Lcd12864_ClearScreen();
}
static void GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIO_CLK_ENABLE();
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2| GPIO_PIN_3 | GPIO_PIN_4 ;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2| GPIO_PIN_3| GPIO_PIN_4, GPIO_PIN_SET);
HAL_NVIC_SetPriority(GPIOA_IRQn, 0);
HAL_NVIC_EnableIRQ(GPIOA_IRQn);
}
void HAL_GPIO_EXTI_Callback(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin)
{
if ((GPIOx == GPIOB) && (GPIO_Pin == GPIO_PIN_5))
{
key_flag = 1;
}
}
void Error_Handler(void)
{
while (1)
{
}
}
void assert_failed(uint8_t *file, uint32_t line)
{
printf("Wrong parameters value: file %s on line %drn", file, line);
}
3.使用下载工具下载成功后效果图,成功点亮
|