c51程序与esp32程序的区别
本文对比了不同嵌入式开发平台的编程特点:1)Arduino采用setup/loop函数替代main函数;2)Keil5需自定义延时函数,而Arduino提供内置delay();3)阻塞式与非阻塞式程序实现差异;4)GPIO配置差异,C51为准双向口,STM32/ESP32提供8种模式。文章还简要介绍了Arduino的pinMode()配置方式和C语言函数返回值概念。
本笔记只是自己记录一下,方便日后复习。
c51的程序开发属于传统的C语言程序结构,esp32的程序开发属于arduino开发框架,两者的程序区别有一部分是由arduino开发框架和传统C语言结构引起的,另外一部分是由esp32和c51的io口引起的。
1.开发框架区别
1.1 main函数
常见的c51和stm32程序是由main函数开始的,但是arduino程序的main函数定义被隐藏,用setup和loop函数进行操作。
setup函数只执行一次,基本上用于对板子的初始化操作。
loop函数内部的内容会一直执行,相当于while(1)死循环。

1.2 函数的区别
使用keil开发程序有的函数非常少,连延时函数也需要自己写。
void delay(int t)
{ while(t--);}
但是arduino程序有大量的函数库,直接调用void delay(200);时间单位是ms,延时更加准确。
1.3 寄存器配置与读写地址
c51在编写程序时,比如定时器配置需要写 2 个寄存器TMOD、TCON,但是esp32定时器配置更多,从arduino开发架构上面将底层封装在寄存器里面。因此c51程序在编写的时候有更多的读写地址配置寄存器的操作。
2.c51和esp32芯片io口区别
2.1两者io口介绍
c51里面没有gpio的概念,io口(P0/P1/P2/P3)无需软件配置模式即可直接用于输入或输出,且c51的io口是并行8位接口,esp32的接口是独立控制的。
stm32与esp32有gpio的概念,gpio与io口的区别如下:

stm32和esp32的gpio口均有8种模式,esp32的按照下面的方式配置:
void pinMode(uint8_t pin,uint8_t mode)
{#define INPUT 0x01 输入模式
#define OUTPUT 0x03 输出模式
#define PULLUP 0x04 上拉
#define INPUT_PULLUP 0x05 输入上拉
#define PULLDOWN 0x08 下拉
#define INPUT_PULLDOWN 0x09 输入下拉
#define OPEN_DRAIN 0x10 开漏
#define OUTPUT_OPEN_DRAIN 0x13 输出开漏
#define ANALOG 0xc0 模拟 }
2.2 由于io口差异造成程序上的差异
1.在c51中需要或者不需要在程序开始之初定义取决于运用io的数量,
对8位io口的操作运用移位计算,不需要在程序开始定义,0xff<<i。单个io口运用sbit位定义,需要在程序最初定义。在点亮led灯的时候,直接对io赋值1就可。P0=0xff;
2.由于esp32每个接口独立,如何应用必须要在程序开始定义好。单个接口需要在程序开始采用宏定义#define LED1 15(使用gpio15);使用多个io口但是每个io口没有明确的关系只需要用宏定义(如key按键),多个接口连续关系需要在程序开始定义常数数组const int may[]={15,…,8}。在点亮led灯的时候,先设置io口模式为输出OUTPUT,然后设置高低电平HIGH/LOW,所有引脚模式的配置必须是大写的,直接输出高低电平也必须是大写的,表示电平的变量可以小写。
2.3 esp32中gpio8种模式的应用
现在介绍两种
(1) output 模式是输出高低电平的模式
output模式下用digitalwrite函数配置高低电平
(2)输入上拉模式
pinMode(key1_pin, INPUT_PULLUP);
digitalRead(key4_pin);输入上拉模式下,用digitalRead函数读取引脚电平
更多推荐

所有评论(0)