外观
屏幕显示实验
电路分析
数控直流电源使用0.96寸的OLED模块进行显示,数据通信是IIC协议,在两条通信线上分别有一个4.7K上拉电阻,这是因为IIC引脚是开漏输出,没有高电平输出能力,需要外部上拉。
oled屏幕的驱动大部分厂商都会写好,通常情况下仅需要移植对应的驱动程序进行适配即可。
功能实现
创建工程
- 打开cubemx软件,配置工程;在此之前需要确保你已经成功安装stm32cubemx软件以及keil软件并下载好对应的芯片支持包了。
注
固态继电器相关引脚默认要拉高,这是为了默认关断固态继电器,同时有一点,切勿把三个引脚都同时拉低,在同一时刻只能有一个固态继电器打开,否则高电压会影响低电压,这一点在配置以及后续代码编写过程中都非常重要。
ch224是电源诱骗芯片,我们可以通过控制对应的引脚来控制输出电压,配置的电平需参考数据手册,默认cfg为1输出5V电平比较合适。
机械按键在按下与松开时,不可避免会产生机械抖动,在进行按键判断时,需要进行消抖操作减少抖动的影响,抖动时间通常是10~30ms之间,最简单的消抖操作是通过延时死等的方式去除抖动。
代码实现
默认生成的代码编译是没有任何问题的,若有问题,基本上就是环境文件,需要重新检查安装,建议把错误信息复制到百度进行查找解决。
在gpio.c中编写或拷贝之前几节课的代码,屏幕显示的驱动代码较多,这里建议新建一个文件夹用于存放;在文件夹中创建三个文件,oled.c,oled.h,font.h,新建的文件夹工程是识别不到的,需要进行包含,以及在工程目录中进行添加。
接下来,打开厂商提供的驱动代码,随意找一个stm32-IIC驱动的代码,先把里面的内容拷贝过来,肯定会有很多报错的,慢慢解决就行。
![]() | ![]() | ![]() |
---|---|---|
拷贝过来的源文件 | 拷贝过来的源文件 | 拷贝过来的源文件 |
修改oled.h文件,更换头文件,删除不用的引脚定义,这里使用的是hal库硬件iic,然后u8的定义改成uint8_t,u16改成uint16_t,u32改成uint32_t,使用替换功能修改即可。
oled.c也类似,修改更换头文件,修改u8、u16、u32定义。除此之外,还需要修改数据发送函数与初始化函数。厂商提供的是软件模拟iic时序,有开始时序、停止时序等等;这些都不需要,这里直接使用硬件iic函数进行发送;整个文件较大,这里仅放出改动后的图。
修改完成后编译应该不会报错了,此时在主函数中调用相关的初始化函数以及屏幕显示函数进行测试。
OLED显示实验部分代码
C
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_I2C1_Init();
/* USER CODE BEGIN 2 */
OLED_Init();
OLED_ShowString(0,0,(uint8_t *)"lceda",16,1);
OLED_Refresh();
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
TIP
当代码烧录进去后,屏幕应该会显示lceda的文字,如果没有显示,应该查看是否是焊接有误。
一定注意不可同时打开多个继电器,这里再三强调。
若发现输出9V、12V失败,可以看看自己的充电头或充电线是不是不支持该电压输出。