STM32与LCD的显示

使用器材:STM32F103RCT6,LCD1602

使用到的LCD引脚如下图所示

其中分为供电引脚GND VDD5.0V
功能引脚RS RW E
以及D0~D7向并行数据总线(Data Bus)
VO 对比度调节引脚
BLA (Backlight Anode)背光正极
BLK (Backlight Cathode):背光负极

电平 RS RW E
指令 执行
数据 读取

下图为指令表

编号 指令 D7 D6 D5 D4 D3 D2 D1 D0
1 显示屏复位 0 0 0 0 0 0 0 1
2 光标归位 0 0 0 0 0 0 1 *
3 置输入模式 0 0 0 0 0 1 I/D S
4 显示控制(开关) 0 0 0 0 1 D C B
5 光标字符位移 0 0 0 1 S/C R/L * *
6 功能设置 0 0 1 DL N F * *

I/D: 光标的移动方向,0左移,1右移;
S: 1所有字符串左移位右移位,0不移动

D: 0关显示,1开显示
C: 控制光标是否显示,0关1开
B: 控制光标是否闪烁,0关1开

S/C: 光标和字符移位控制,0仅光标,1都移动
R/L: 移动方向,0左1右

DL: 几位总线,0为八位,1为四位
N: 显示多少行,0单1双
F: 字符阵大小,0为5×7,1为5×11

WorkFlow:
LCD初始化 -> 写数据 -> 显示

假设我要写一个”A”的示例如下:

  1. 初始化LCD
    1. 设置工作模式(如 8位总线,2行显示,5x8点阵) → [发送指令,触发一次 E 跳变]
    2. 设置光标的显示(开/关显示,开/关光标,光标闪烁/不闪烁) → [发送指令,触发一次 E 跳变]
    3. 设置光标/字符何移位(如写一个字后,光标自动向右/左移动一格)→ [发送指令,触发一次 E 跳变]
    4. 清屏 → [发送指令,触发一次 E 跳变]
  2. 写数据
    1. 设定显示的位置
      1. RS=0,RW=0
      2. D0~D7 = 地址位置(第一行0x80-0x8F,第二行0xC0-0xCF)
      3. E跳变
    2. 设定显示的内容
      1. RS=1,RW=0
      2. D0 ~ D7 = ‘A’
      3. E跳变
  3. 显示内容

STM32控制舵机的旋转

使用器材:STM32F103RCT6,SG90

此型号舵机供电5v,中间为正极,黄色线为驱动线,需要发出50hz的电平切换

函数设计:

1
2
3
4
5
6
7
8
9
10
void Ctrl_Servo(uint8_t degree) {
if (degree < 0 || degree > 180) {return;}
uint16_t high_us = 500 + degree*200/18;
uint16_t low_us = 20000 - high_us;
HAL_GPIO_WritePin(DJ_GPIO_Port, DJ_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(DJ_GPIO_Port, DJ_Pin, GPIO_PIN_SET);
Delay(high_us);
HAL_GPIO_WritePin(DJ_GPIO_Port, DJ_Pin, GPIO_PIN_RESET);
Delay(low_us);
}

STM32中RTC时钟的用法

Awaiting Edit