关键字

  • CPOL - clock polarity // 时钟极性
  • CPHA - Clock phase // 时钟相位
  • LCD_CD - Control/Display contorl// 控制/显示控制
  • MX - Column Mirroring // 列镜像
  • MY - Row Mirroring // 行镜像
  • SL - Start Line

简介

该项目为EthMOH项目中的一部分,该项目实现了主机通讯、按键采样和LCD显示功能。主要功能是STM8S003F3通过串行口UART实现了主机的通讯功能。采样按钮状态发送到主机,接收主机指令实现LCD显示控制。该该项目采用了一款晶联讯液晶模块厂的LCD显示模块JLX12864G-0088。

开发环境

编译软件 IAR

引用库STM8S/A Standard Peripherals Library

固件开发采用了ST公司的标准库代码(STSW-STM8069/STM8S/A Standard peripheral libray)进行开发。下载地址:<
https://my2.st.com/content/my_st_com/en/products/embedded-software/mcus-embedded-software/stm8-embedded-software/stsw-stm8069.license%3d1463402711737.html>

硬件说明

STM8S003F3引脚定义

TSSOP20 Pin Name Type Function
1 PD4/BEEP/TIM2_CH1/UART1_CK I/O LCD_BackLight
2 PD5/AIN5/UART1_TX I/O UART1_TX
3 PD6/AIN6/UART1_RX I/O UART1_RX
4 NRST I/O Reset
5 PA1/OSCIN I/O bank
6 PA2/OSCOUT I/O bank
7 Vss S GND
8 VCAP S 680nf
9 Vdd S +3.3V
10 PA3/TIM2_CH3[SPI_NSS] I/O SPI_NSS
11 PB5/I2C_SDA[TIM1_BKIN] I/O LED-D2
12 PB4/I2C_SCL I/O LED-D1
13 PC3/TIM1_CH3[TLI][TIM1_CH1N] I/O LCD_RST
14 PC4/CLK_CCO/TIM1_CH4/AIN2/[TIM1_CH2N] I/O LCD_CD
15 PC5/SPI_SCK[TIM2_CH1] I/O SPI_SCK
16 PC6/SPI_MOSI[TIM1_CH1] I/O SPI_MOSI
17 PC7/SPI_MISO[TIM1_CH2] I/O SPI_MISO
18 PD1/SWIM I/O SWIM
19 PD2/AIN3/[TIM2_CH3] I/O Key_ADC
20 PD3/AIN4/TIM2_CH2/ADC_ETR I/O bank

LCD(JLX12864G-0088)规格:驱动芯片UC1701x,点阵:128x64,视区:39.8x25.5mm

该LCD采用的控制芯片和SDRecorder项目中采用的控制芯片相同。因而,有借鉴的地方。该LCD模块采用串行口的方式进行控制,该方式只能对LCD屏进行写操作。

UC1701x串行口介绍

摘自《uc1701x_a1.3.pdf》P25

STM8S003F3 SPI口配置

  • CPHA=1
  • CPOL=1

摘自《RM0016 Reference manual》P263

软件开发

初始代码引用

最初考虑采用 \Project\STM8S_StdPeriph_Examples\UART1\UART1_Interrupt\的代码。该代码采用了中断的方式发送/接收数据。并且,将数据保存在一个循环的FIFO缓冲器中。

对于本项目来讲,只是简单的发送和接收,不需要FIFO缓冲区。因而,决定采用 \Project\STM8S_StdPeriph_Examples\UART1\UART1_HyperTerminal_Interrupt\的代码作为初始代码。

该代码包含4个文件:

main.c - 主程序
stm8s_conf.h - 配置文件
stm8s_it.c - 中断函数文件
stm8s_it.h - 中断函数头文件

LCD控制代码(LCD默认将左下角设为原点(0,0)

JLX12864G-0088使用注意事项:

  1. 该LCD模块为点阵显示屏,不包含字库
  2. 该LCD显示像素为128*64
  3. 该LCD分为9页,前8(0-7)页每一页8行,对应LCD屏的64行。第8页对应图标输出控制。
    • page0 - COM1_8
    • page1 - COM9_16
    • page2 - COM17_24
    • page3 - COM25_32
    • page4 - COM33_40
    • page5 - COM41_48
    • page6 - COM49_56
    • page7 - COM57_64
    • page8 - CIC
  4. 每一行为128点阵,也就是128/8=16字节
  5. 一页为8行,刷新一页的话就需要16*8=128字节

程序文件
* lcd_hw.c - LCD硬件相关函数定义
* lcd_hw.h - LCD硬件相关头文件
* lcd.c - LCD相关API函数定义
* lcd.h - LCD相关API头文件

关键代码讲解

void Lcd_Init(void)
{  LCD_GPIO_Init();      // init lcd's gpioLCD_HW_Reset();       // hardware reset lcdLcd_Delay(10);           LcdWriteCmd(0xFA);    // Set Advanced Program Control 0LcdWriteCmd(0x93);    //LcdWriteCmd(0xA0);    // Set SEG Direction, MX=0LcdWriteCmd(0xC8);    // Set COM Direction, MY=1LcdWriteCmd(0xA2);    // Set LCD Bias RatioLcdWriteCmd(0x23);    // Set Vlcd Resistor RatioDelay(10);LcdWriteCmd(0x81);    // Set Electronic VolumeLcdWriteCmd(0x3A);    // Set Electronic VolumeDelay(10);LcdWriteCmd(0x2F);    // set boostLcdWriteCmd(0xAF);    // Set Display EnableLcdWriteCmd(0x40);    // Set Scroll LineLcdWriteCmd(0xE0);    // Set Cursor Update Mode
}

POWER-UP
1. Turn ON Vdd and Vdd2/3
2. Wait <=3 ms
3. Set RST pin Low
4. Set RST pin High
5. SEt Adv. Program Control 0
6. Set SEG Direction
7. Set COM Direction
8. Set Vlcd Resistor Ratio
9. Set LCD Bias Ratio
10. Set Electronic volume
11. Write display RAM // 设置显示Image
12. Set Power Control
13. Set Display Enable

  • lcd_gpio_init() - LCD GPIO初始化函数
  • *

SPI初始化调用stm8s_spi.hSPI_Init()函数。

 SPI_Init(SPI_FIRSTBIT_MSB, SPI_BAUDRATEPRESCALER_2, SPI_MODE_MASTER, SPI_CLOCKPOLARITY_LOW,SPI_CLOCKPHASE_1EDGE, SPI_DATADIRECTION_1LINE_TX, SPI_NSS_SOFT,(uint8_t)0x07);
  • FirstBit - MSB
  • BaudRatePrescaler -

SPI_Init函数参数:

  • FirstBit : This parameter can be any of the SPI_FirstBit_TypeDef enumeration.
  • BaudRatePrescaler : This parameter can be any of the SPI_BaudRatePrescaler_TypeDef enumeration.
  • Mode : This parameter can be any of the SPI_Mode_TypeDef enumeration.
  • ClockPolarity : This parameter can be any of the SPI_ClockPolarity_TypeDef enumeration.
  • ClockPhase : This parameter can be any of the SPI_ClockPhase_TypeDef enumeration.
  • Data_Direction : This parameter can be any of the SPI_DataDirection_TypeDef enumeration.
  • Slave_Management : This parameter can be any of the SPI_NSS_TypeDef enumeration.
  • CRCPolynomial : Configures the CRC polynomial.

SPI_Init函数原型

void SPI_Init(SPI_FirstBit_TypeDef FirstBit, SPI_BaudRatePrescaler_TypeDef BaudRatePrescaler, SPI_Mode_TypeDef Mode, SPI_ClockPolarity_TypeDef ClockPolarity, SPI_ClockPhase_TypeDef ClockPhase, SPI_DataDirection_TypeDef Data_Direction, SPI_NSS_TypeDef Slave_Management, uint8_t CRCPolynomial)

UART命令

  • move(x,y)
  • putstring(“hello”)
  • putX()

按键采样程序(A/D转换)

该设计的按键采样采用不同按键产生不同的电平,通过A/D采样电平电压判断按键的状态。在这个过程中,按键的电压设计和A/D采样是关键的环节。

对于固件来讲,A/D采样是最为关键的环节。该设计中,A/D引脚为PD2/AIN3。

关于A/D采样的源代码,参考ST公司的应用文档AN3280。里面提供了详细的A/D使用代码。拿过来修改端口号就可以使用了。非常方便。

问题汇总

引脚输出问题

STM8S的GPIO输出可以是Open-Drain和push-pull两种输出状态。如果选择Open-Drain状态,这GPIO输出需要外接上拉电阻,否则该引脚没有任何状态输出。如果选择push-pull输出,这GPIO输出引脚可以检测到电平变化。这个不是什么大的问题,但是有时候会忽略,出现不同的状况。

LCD屏镜像设置

在LCD屏中,具备两个选项MX,MY分别控制LCD屏水平镜像和垂直镜像。
参考LCD的13-Set SEG Direction和14-Set COM Direction指令。

字库(front.h)问题

我采用的这个字库是以往程序中使用的字库。该字库只是包含了可打印字符的字库,它是不完整的。因而,在使用过程中。需要留意ASCII的转换问题。该字库从0x20(Space)开始。因而,在使用ASCII的时候,不能直接用ASCII代码进行字库查询。需要将ASCII代码减去0x20才可以进行字库查询。例如:Lcd_Draw_8xN_Dots(0,gLcdColAddr,&bAsciiTable[('A'-0x20)*6],6);

图片显示问题

在LCD中显示图片或logo,需要将图片转换成常量输出,然后一点一点的更新LCD屏,达到显示图片的目的。

附录

CONTROL RESISGEr //控制寄存器 (uc1701x_a1.3pdf) P10

Name Bits Default Description
LC 2 2H LCD Control: LC[0]: MX, Mirror X SEG/Column sequence inversion(default:OFF) LC[1]:MY, Mirror Y COM/Row sequence inversion(Default: 1:ON)

COMMAND TABLE //命令表(uc1701x_a1.3pdf)

  1. Write Data Byte to Memory // 写数据字节到内存
  2. Read Data Byte form Memory // 从内存中读取数据字节
  3. Get Status // 得到状态
  4. Set Column Address // 设置列地址
Action CMD C/D W/R D7 D6 D5 D4 D3 D2 D1 D0
Set Column Address LSB, CA[3:0] 0x00+CA3_0 0 0 0 0 0 0 CA3 CA2 CA1 CA0
Set Column Address MSB, CA[7:4] 0x01+CA3_0 0 0 0 0 0 1 CA7 CA6 CA5 CA4

从主机接口写/读内存前要设置SRAM列地址。

CA范围:0~131

  1. Set Power Control // 设置电源控制
  2. Set Scroll Line // 设置滚动行
    设置滚动行号(Scroll line)。范围:0~63

  3. Set Page Address // 设置页地址

Action CMD C/D W/R D7 D6 D5 D4 D3 D2 D1 D0
Set Page Address LSB, PA[3:0] 0x0B+PA3_0 0 0 1 0 1 1 PA3 PA2 PA1 PA0

从主机接口写/度内存前需要先设置SRAM页地址。SRAM的每一页对应LCD面板中的8个COM线,除了最后一页。最后一页对应图标输出CIC。

可能值:0~8

  1. Set Vlcd Resistor Ratio
  2. Set Electronic Volume
  3. Set All Pixel ON // 设置所有像素开
  4. Set Inverse Display // 设置反转显示
Action CMD C/D W/R D7 D6 D5 D4 D3 D2 D1 D0
Set Inverse Display, DC[0] 0xA6+0x01 0 0 1 0 1 0 0 1 1 DC0

Set DC[0] to force all SEG drivers to output the inverse of the data (bit-wise) stored in display RAM. This funciton has no effect on the existing data stored in display RAM.

  1. Set Display Enable
  2. Set SEG Direction

    • 0xA0 - normal: 从右向左稍描132列
    • 0xA1 - reverse: 从左向右稍描132列
Action CMD C/D W/R D7 D6 D5 D4 D3 D2 D1 D0
Set Segment direction, LC[0] 0xA0+0x01 0 0 1 0 1 0 0 0 0 MX

Set LC[0] for SEG(column) mirror(MX). Default:0
设置LC[0]使能水平镜像(MX)。默认:0

MX is implemented by reversing the mapping order between RAM and SEG(column) electrodes. The data stored in RAM is not affected by MX command. Yet, MX has immediate effect on the display image.

MY用来反转RAM和SEG(column)之间的电极影射。存储在RAM的数据不受MX命令影响。MY会立即影响显示Image。

  1. Set COM Direction

    • 0xC0 - normal: 从下至上扫描64行
    • 0xC8 - reverse: 从上至下扫描64行
Action CMD C/D W/R D7 D6 D5 D4 D3 D2 D1 D0
Set Common direction, LC[1] 0xC0+0x08 0 0 1 0 1 0 MY - - -

Set LC[1] for COM(row) mirror(MY). Default: 1b
设置LC[1]使能垂直镜像(MY)。默认:1b

MY is implemented by reversing the mapping between RAM and COM(Row) electrodes. The data stored in RAM is not affected by MY command. Yet, MY has immediate effect on the display image.

MY用来反转RAM和COM(ROM)之间的电极影射。存储在RAM的数据不受MX命令影响。MY会立即影响显示Image。

  1. System Reset(Software Reset)
  2. NOP
  3. Set LCD Bias Ration
  4. Set Cursor Update Mode
  5. Reset Cursor Update Mode
  6. Set Static Indicator OFF
  7. Set Static Indicator ON
  8. Set Booster Ration
  9. Set Power Save
  10. Set Advanced Program Control 0
  11. Set Advanced Program Control 1

STM8S ADC Regsiter

  • ADC_DBxRH (x=0…7 or 0…9) - ADC data buffer register x high
  • ADC_DBxRL (x=0…7 or 0…9) - ADC data buffer register x low
  • ADC_CSR - ADC control/status register//ADC控制/状态寄存器
    • Bit 7 EOC: End of conversion//转换完成
    • Bit 6 AWD: Analog Watchdog flag//
    • Bit 5 EOCIE: Interrupt enable for EOC
    • Bit 4 AWDIE: Analog watchdog interrupt enable
    • Bits 3:0 CH[3:0]: Channel selection bits
  • ADC_CR1 - ADC configuration register1
    • Bit 6:4 SPSEL[2:0]: Prescaler selection
    • Bit 1 CONT: Continuous conversion
    • Bit 0 ADON: A/D Converter on/off
  • ADC_CR2 - ADC configuration register 2
    • Bit 6 EXTTRIG: External trigger enable
    • Bits 5:4 EXTSEL[1:0]: External event selection
      • 00: internal TIM1 TRGO event
      • 01: External interrupt on ADC_ETR pin
    • Bit 3 ALIGN: Data alignment
    • Bit 1 SCAN: Scan mode enable
  • ADC_CR3 - ADC configuration register 3
    • Bit 7 DBUF: Data buffer enable
    • Bit 6 OVR: Overrun flag
  • ADC_DRH - ADC data register high
  • ADC_DRL - ADC data register low
  • ADC_TDRH - ADC schmitt trigger disable register high
  • ADC_TDRL - ADC schmitt trigger disable register low
  • ADC_HTRH - ADC high threshold register high//高门限
  • ADC_HTRL - ADC high threshold register low
  • ADC_LTRH - ADC low threshold register high//低门限
  • ADC_LTRL - ADC low threshold register low
  • ADC_AWSRH - ADC watchdog status register high
  • ADC_AWSRL - ADC watchdog status register low
  • ADC_AWCRH - ADC watchdog control register high
  • ADC_AWCRL - ADC watchdog control register low

IR077K firmware设计相关推荐

  1. 【音视频】浅学ISP数据处理流程

    目录 前言 **ISP和DSP的作用:** **图像处理流程:** 一.ISP概念 二.ISP 处理流程 1. Bayer pattern(拜耳滤色片) 2. BLC 黑电平补偿 (Black lev ...

  2. MTK Camera 基础知识

    文章目录 数字成像系统流程综述 曝光 对焦马达 镜头(lens) MIPI数据与RAW数据的转换(未完待续) ISP的主要内容和Bayer Raw的处理 RGB.YUV和YCbCr三种颜色空间 补充 ...

  3. 相机ISP图像处理流程

    摄像机模组与图像处理: 事实上,ISP 除了上面提到的主要功能外,还需要支持 DENOISE,CONTRAST.SATURATION.SHARPNESS 等调整功能. 3A技术即自动对焦(AF).自动 ...

  4. 相机系统综述 —— ISP

    转载出自:http://www.dididongdong.com/archives/3722 1.概述 ISP全称Image Signal Processing,即图像信号处理.主要用来对前端图像传感 ...

  5. ISP概述、工作原理及架构

    1.概述 ISP全称Image Signal Processing,即图像信号处理.主要用来对前端图像传感器输出信号处理的单元,以匹配不同厂商的图象传感器. ISP 通过一系列数字图像处理算法完成对数 ...

  6. 痞子衡嵌入式:飞思卡尔Kinetis开发板OpenSDA调试器那些事(上)- 背景与架构

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔Kinetis MCU开发板板载OpenSDA调试器(上篇). 众所周知,嵌入式软件开发几乎离不开调试器,因为写一个稍有代码规模 ...

  7. ISP(图像信号处理)算法概述、工作原理、架构、处理流程

    目录 ISP的主要内部构成:ISP内部包含 CPU.SUP IP(各种功能模块的通称).IF 等设备 ISP的控制结构:1.ISP逻辑    2.运行在其上的firmware ISP上的Firmwar ...

  8. 6 海思Hi3518E的ISP及其3A

    ISP主要坐下面的工作: AEC(自动曝光控制).AGC(自动增益控制).AWB(自动白平衡).AF(自动对焦)色彩校正.Lens Shading.Gamma 校正.祛除坏点.Auto Black L ...

  9. 从FPGA到camera ISP漫谈

    从FPGA到camera ISP漫谈 参考文献链接 https://mp.weixin.qq.com/s/RBzN1Ii3_AH3omljmAByNA https://mp.weixin.qq.com ...

最新文章

  1. keil git 编译文件_keil下的STM32程序开发部署(一)
  2. php中json_encode中文编码问题分析
  3. 邮件防伪SPF,反垃圾邮件
  4. Science:把这个人类特有基因转入猴子后,它们的大脑更大更强了,但科学家没敢让它出生...
  5. Total Physical Response TPR
  6. 当出现“在当前位置发现已经存在为RESUME.XLW的文件。您希望将该文件替换掉吗?” 解决方案...
  7. ML--HMM(隐马尔可夫模型及python的实现1)
  8. 尚硅谷Java入门视频教程(一)编程入门
  9. python查询电脑序列号 CPU、主板、硬盘、MAC、BIOS
  10. js laypage mysql_laypage 物理分页与逻辑分页实例
  11. 【无标题】How to Programe 2021 GMC Terrain Smart Key Programming by Autel IM508
  12. pocket pc 2003 联网
  13. 软件的接口设计图_面向服务架构(SOA)的汽车软件分析和设计
  14. http://wenku.baidu.com/view/981f99d376eeaeaad1f330e7.html
  15. 小程序使用云开发,拍照获取银行卡卡号
  16. 聊天机器人 AIML文件 srai标签解释(五)
  17. Docker-安装部署全过程
  18. 计算机辅助设计绘图员四级,计算机辅助设计绘图员-标准及考试大纲.pdf
  19. 1626:Hankson 的趣味题
  20. 第87篇ES之Elastica-php匹配多值字段及给Problem的elementName设中文分词ik

热门文章

  1. caffe源码学习:softmaxWithLoss前向计算
  2. 学习文档【超详细中文版】(小甲鱼视频)
  3. 手机网站(wap)广告展示一般都有哪些表现形式?
  4. 《28岁未成年》感悟——永远不要失去自我
  5. 智慧多功能综合杆案例分享:上海市多杆合一、综合杆道路智慧路灯项目解决方案解析
  6. flutter 图片加载
  7. C/C++订餐管理系统
  8. socket编程——upd(数据报套接字)
  9. 男人三十而立,被动收入,越早开始越好
  10. 九峰影业创始人_九峰百度百科