0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

第十一章 W55MH32 SMTP示例

W55MH32 来源:W55MH32 作者:W55MH32 2025-07-24 09:49 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

单芯片解决方案,开启全新体验——W55MH32 高性能以太网单片机

W55MH32是WIZnet重磅推出的高性能以太网单片机,它为用户带来前所未有的集成化体验。这颗芯片将强大的组件集于一身,具体来说,一颗W55MH32内置高性能Arm® Cortex-M3核心,其主频最高可达216MHz;配备1024KB FLASH与96KB SRAM,满足存储与数据处理需求;集成TOE引擎,包含WIZnet全硬件TCP/IP协议栈、内置MAC以及PHY,拥有独立的32KB以太网收发缓存,可供8个独立硬件socket使用。如此配置,真正实现了All-in-One解决方案,为开发者提供极大便利。

在封装规格上,W55MH32 提供了两种选择:QFN100和QFN68。

W55MH32L采用QFN100封装版本,尺寸为12x12mm,其资源丰富,专为各种复杂工控场景设计。它拥有66个GPIO、3个ADC、12通道DMA、17个定时器、2个I2C、5个串口、2个SPI接口(其中1个带I2S接口复用)、1个CAN、1个USB2.0以及1个SDIO接口。如此丰富的外设资源,能够轻松应对工业控制中多样化的连接需求,无论是与各类传感器、执行器的通信,还是对复杂工业协议的支持,都能游刃有余,成为复杂工控领域的理想选择。同系列还有QFN68封装的W55MH32Q版本,该版本体积更小,仅为8x8mm,成本低,适合集成度高的网关模组等场景,软件使用方法一致。更多信息和资料请进入http://www.w5500.com/网站或者私信获取。

此外,本W55MH32支持硬件加密算法单元,WIZnet还推出TOE+SSL应用,涵盖TCP SSL、HTTP SSL以及 MQTT SSL等,为网络通信安全再添保障。

为助力开发者快速上手与深入开发,基于W55MH32L这颗芯片,WIZnet精心打造了配套开发板。开发板集成WIZ-Link芯片,借助一根USB C口数据线,就能轻松实现调试、下载以及串口打印日志等功能。开发板将所有外设全部引出,拓展功能也大幅提升,便于开发者全面评估芯片性能。

若您想获取芯片和开发板的更多详细信息,包括产品特性、技术参数以及价格等,欢迎访问官方网页:http://www.w5500.com/,我们期待与您共同探索W55MH32的无限可能。

wKgZO2iBkFiABouxAADcSxdhb94413.png

第十一章 W55MH32 SMTP示例

本篇文章,我们将详细介绍如何在W55MH32芯片上面实现SMTP协议。并通过实战例程,为大家讲解如何在W55MH32上使用SMTP协议给他人发送电子邮件。

该例程用到的其他网络协议,例如DHCP和DNS,请参考相关章节。有关W55MH32的初始化过程,请参考Network Install 章节,这里将不再赘述。

1 SMTP协议简介

SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)是一种用于电子邮件传输的通信协议。它是互联网标准协议之一,专门设计用于电子邮件的发送和路由。SMTP定义了邮件如何从发件人发送到收件人的电子邮件服务器,并规范了服务器之间的邮件中继操作。

2 SMTP协议特点

面向文本:SMTP协议使用纯文本命令和响应(如HELO、MAIL FROM、RCPT TO等)来进行通信,邮件内容通常是以ASCII码表示。

请求-响应模式:SMTP通信是基于请求-响应模型的,客户端发送请求,服务器根据请求返回响应。

基于TCP:SMTP依赖于TCP协议来提供可靠的数据传输服务。SMTP会通过TCP建立连接并发送邮件。

广泛兼容性:SMTP是国际标准邮件传输协议,广泛应用于邮件系统,确保不同系统间高效互通。

高效性与可靠性:SMTP协议简单易用,支持错误处理和重试机制。邮件无法发送时,可暂存队列并重试,确保传输可靠。

可扩展性:通过扩展SMTP协议的命令和响应码,可以支持更多的邮件传输特性和功能。

安全性:SMTP本身不处理加密,但可结合 SSL/TLS(SMTPS)提供加密通道,保障邮件传输的安全性。

异步传输:SMTP支持异步传输,使邮件发送和接收可在不同时间进行,提升效率并支持批量处理。

灵活性:SMTP设计灵活,可配置邮件路由、优先级、大小限制等,以满足不同需求。

3 SMTP应用场景

接下来,我们了解下在W55MH32上,可以使用SMTP协议完成哪些操作及应用呢?

物联网IoT)设备远程监控:使用W55MH32实现SMTP通信,收集传感器数据,并发送定期报告或警报邮件。

环境监测系统:W55MH32通过SMTP协议将监测数据(如温湿度、CO2浓度等)发送到指定的邮箱,确保及时获取信息。

设备状态报告与日志记录:通过定时任务触发W55MH32每隔一段时间自动发送设备的状态报告或运行日志到管理人员邮箱。

远程故障报警与支持:结合传感器和W55MH32的邮件发送功能,可以实现自动报警,减少人工干预的需要。

工业自动化和远程监控:使用W55MH32连接到互联网,并利用SMTP协议将设备状态、报警等信息发送到指定的邮箱。

远程控制反馈:通过W55MH32接收邮件,解析邮件命令并执行相应操作,然后通过SMTP将执行结果反馈给发送者。

SMTP发送邮件流程

使用TCP协议连接SMTP服务器

发送握手消息

发送用户认证消息

设置邮件发送地址

传输邮件内容

完成邮件发送

4STMP协议的主要命令

wKgZO2iBkFiABouxAADcSxdhb94413.png

SMTP服务器响应状态码

wKgZO2iBkFmAOLpXAAELofFEAAY248.png

5实现过程

接下来,我们在W55MH32上实现SMTP邮件发送功能。

注意:因为本示例需要访问互联网,请确保 W55MH32的配置能够访问互联网。

步骤一:SMTP发送内容初始化

发送指令定义:

char    hello[50]     = "HELO localhost";                   // Identity command
char    hello_reply[] = "250 OK";                           // Id successfully responded
char    AUTH[50]      = "AUTH LOGIN";                       // Authentication request
char    AUTH_reply[]  = "334 dXNlcm5hbWU6";                 // The authentication request was successfully 
sent
char    name_126[100] = "[email protected]";                 // 126 Login email address
char    base64name_126[200];                                // 126 base64 encoding of the login mailbox name
char    name_reply[]     = "334 UGFzc3dvcmQ6";              // The login name was sent successfully
char    password_126[50] = "ZPURADLGRUPQLVBK";              // 126 Email login password
char    base64password_126[100];                            // base64 123 Password for logging in to the 
mailbox
char    password_reply[] = "235 Authentication successful"; // Login successful response
char    from[]           = "[email protected]";              // Sender email
char    from_reply[]     = "250 Mail OK";
char    to[]             = "[email protected]";             // Recipient email address
char    to_reply[]       = "250 Mail OK";
char    data_init[10]    = "data";                          // Request data transfer
char    data_reply[]     = "354";                           // The request was successfully responded to 
HEAD
char    Cc[]             = "";                              // Cc to email
char    subject[]        = "Hello!WIZnet!";                 // subject
char    content[]        = "Hello!WIZnet!";                 // text part
char    mime_reply[]     = "250 Mail OK queued as";         // The email was sent successfully
char    mailfrom[50]     = "MAIL FROM:<  >";
char    rcptto[50]       = "rcpt to:<  >";
char    mime[200]        = "From:rn";
char    mime1[50]        = "To:rn";
char    mime2[50]        = "Cc:rn";
char    mime3[50]        = "Subject:rn";
char    mime4[50]        = "MIME-Version:1.0rnContent-Type:text/plainrnrn";
char    mime5[50]        = "rn.rn";

步骤二:发送邮件内容初始化:

mailmessage(); // Mail command information processing

mailmessage()函数内容如下:

void mailmessage(void)
{
   uint16_t len_from = strlen(from);
   uint16_t len_to   = strlen(to);
   uint16_t len_Cc   = strlen(Cc);
   uint16_t len_sub  = strlen(subject);
   strcat(hello, "rn");
   strcat(AUTH, "rn");
   base64encode(name_126, base64name_126);
   base64encode(password_126, base64password_126);
   strcat(base64name_126, "rn");
   strcat(base64password_126, "rn");
   str_insert(mailfrom, from, 11);
   strcat(mailfrom, "rn");
   str_insert(rcptto, to, 9);
   strcat(rcptto, "rn");
   strcat(data_init, "rn");
 
   str_insert(mime, from, 5);
   str_insert(mime1, to, 3);
   str_insert(mime2, Cc, 3);
   str_insert(mime3, subject, 8);
   str_insert(mime5, content, 0);
   strcat(mime, mime1);
   strcat(mime, mime2);
   strcat(mime, mime3);
   strcat(mime, mime4);
   strcat(mime, mime5);
}

步骤三:使用DNS协议解析SMTP服务器地址

if (do_dns(ethernet_buf, smtp_server_name, smtp_server_ip))
{
   while (1)
   {
   }
}

步骤四:SMTP发送邮件操作

while (1)
{
   do_smtp(SOCKET_ID, ethernet_buf, smtp_server_ip); // smtp run
}

do_smtp()函数内容如下:

void do_smtp(uint8_t sn, uint8_t *buf, uint8_t *smtp_server_ip)
{
 volatile uint8_t ret;
 uint32_t         len       = 0;
 uint16_t         anyport   = 5000;
 uint8_t          Smtp_PORT = 25;
 memset(buf, 0, ETHERNET_MAX_BUF_SIZE);
 switch (getSn_SR(sn))
 {
 case SOCK_INIT:
     ret = connect(sn, smtp_server_ip, Smtp_PORT);
     break;
 case SOCK_ESTABLISHED:
     if (getSn_IR(sn) & Sn_IR_CON)
     {
         setSn_IR(sn, Sn_IR_CON);
     }
     while (!Mail_Send_OK)
     {
         len = getSn_RX_RSR(sn);
         if (len > 0)
         {
             memset(buf, 0, ETHERNET_MAX_BUF_SIZE);
             len = recv(sn, (uint8_t *)buf, len);
             send_mail(sn, buf, smtp_server_ip);
         }
     }
     disconnect(sn);
     break;
 case SOCK_CLOSE_WAIT:
     if ((len = getSn_RX_RSR(sn)) > 0)
     {
         while (!Mail_Send_OK)
         {
             len = recv(sn, (uint8_t *)buf, len);
             send_mail(sn, buf, smtp_server_ip);
         }
     }
     disconnect(sn);
     break;
 case SOCK_CLOSED:
     socket(sn, Sn_MR_TCP, anyport++, 0x00);
     break;
 default:
     break;
 }
 if (Mail_Send_OK)
 {
     while (1)
     {
     }
 }
}

在该函数中,程序会执行一个 TCP Client模式的状态机,详细讲解请参考TCP Client章节,这里不再赘述。当程序处于 SOCK_ESTABLISHED (即成功连接上SMTP服务器)状态时,SMTP服务器会主动发送一条消息给W55MH32,当接收到这条消息后,进入send_mail()函数进行SMTP发送邮件流程:

send_mail()函数内容如下:

void send_mail(uint8_t sn, uint8_t *buf, uint8_t *smtp_server_ip)
{
   volatile uint8_t ret;
   switch (SMTP_STATE)
   {
   case waitfor220:
       if (strstr((const char *)buf, "220") != NULL)
       {
           ret        = send(sn, (uint8_t *)hello, strlen(hello));
           SMTP_STATE = waitforHELO250;
       }
       else
       {
           printf("Connected failed!rn");
       }
       break;
   case waitforHELO250:
       if (strstr((const char *)buf, hello_reply) != NULL && strstr((const char *)buf, "Mail") == NULL)
       {
           ret        = send(sn, (uint8_t *)AUTH, strlen(AUTH));
           SMTP_STATE = waitforAUTH334;
       }
       else
       {
           printf("smtp handshake failed!rn");
       }
       break;
   case waitforAUTH334:
       if (strstr((const char *)buf, AUTH_reply) != NULL)
       {
           ret        = send(sn, (uint8_t *)base64name_126, strlen(base64name_126));
           SMTP_STATE = waitforuser334;
       }
       else
       {
           printf("AUTH authentication request failed!rn");
       }
       break;
   case waitforuser334:
       if (strstr((const char *)buf, name_reply) != NULL)
       {
           ret        = send(sn, (uint8_t *)base64password_126, strlen(base64password_126));
           SMTP_STATE = waitforpassword235;
       }
       else
       {
           printf("username send failed!rn");
       }
       break;
   case waitforpassword235:
       if (strstr((const char *)buf, password_reply) != NULL)
       {
           ret        = send(sn, (uint8_t *)mailfrom, strlen(mailfrom));
           SMTP_STATE = waitforsend250;
       }
       else
       {
           printf("password error!rn");
       }
       break;
   case waitforsend250:
       if (strstr((const char *)buf, from_reply) != NULL && strstr((const char *)buf, "queued as") == NULL)
       {
           ret        = send(sn, (uint8_t *)rcptto, strlen(rcptto));
           SMTP_STATE = waitforrcpt250;
       }
       else
       {
           printf("Send email failed to set up!rn");
       }
       break;
   case waitforrcpt250:
       if (strstr((const char *)buf, to_reply) != NULL)
       {
           ret        = send(sn, (uint8_t *)data_init, strlen(data_init));
           SMTP_STATE = waitfordate354;
       }
       else
       {
           printf("Failed to set the receiving mailbox!rn");
       }
       break;
   case waitfordate354:
       if (strstr((const char *)buf, data_reply) != NULL)
       {
           ret        = send(sn, (uint8_t *)mime, strlen(mime));
           SMTP_STATE = waitformime250;
       }
       else
       {
           printf("Failed to send content setuprn");
       }
       break;
   case waitformime250:
       if (strstr((const char *)buf, mime_reply) != NULL)
       {
           Mail_Send_OK = 1;
           printf("mail send OKrn");
       }
       break;
   default:
       break;
   }
}

send_mail()中,会执行一个发送邮件的状态机,流程如下图所示:

wKgZO2iBkFmAHN3LAAGwXyczKhA211.png

1.SMTP握手:发送HELO命令,等待服务器返回250 OK响应码,确认握手成功。

2.用户认证:

(1)请求认证:发送AUTH LOGIN命令,表明客户端需要认证,等待服务器返回334,请求用户名。

(2)提交用户名:发送经过Base64编码的用户名(如:base64name_126),等待服务器返回334,请求密码。

(3)提交密码:发送经过Base64编码的密码(如:base64password_126),等待服务器返回235,确认认证成功。

3.设置邮件发送地址:

(1) 设置发件人:发送MAIL FROM:<发件人邮箱>,等待服务器返回250,确认发件人地址成功设置。

(2) 设置收件人:发送RCPT TO:<收件人邮箱>,等待服务器返回250,确认收件人地址成功设置。

4.传输邮件内容:

(1) 请求数据传输:发送DATA命令,表明开始传输邮件数据,等待服务器返回354,表示已准备接收数据。

(2) 发送邮件数据:按以下格式发送邮件数据:

发件人信息:From:

收件人信息:To:

抄送信息:Cc:

邮件主题:Subject:

邮件内容:实际的文本部分

数据结束用rn.rn表示

等待服务器返回250,确认邮件内容已成功排队

5.完成邮件发送:

如果服务器返回250,标志邮件成功发送。

设置Mail_Send_OK = 1,并打印提示信息mail send OK

6运行结果

烧录例程运行后,首先进行了PHY链路检测,接着是通过DHCP获取网络地址信息,然后是通过DNS解析SMTP服务器域名,最后是进行邮件发送,如下图所示:

wKgZPGiBkFiAGT8HAACU1yBb1cw306.png

可以在设置接收邮件的账号中查找接收到的邮件:

wKgZPGiBkFmAAoOhAAELofFEAAY126.png

通过wireshark抓包查看,流程与send_mail()函数一致。

wKgZO2iBkFiABouxAADcSxdhb94413.png

7总结

本文讲解了如何在 W55MH32芯片上实现 SMTP协议,通过实例详细展示了在该芯片上使用 SMTP协议发送电子邮件的实现流程,包括 SMTP发送内容初始化、使用 DNS协议解析 SMTP服务器地址、SMTP发送邮件操作等核心步骤。文章还对 SMTP协议的简介、特点、应用场景,以及主要命令和服务器响应状态码进行了分析,帮助读者理解其在邮件传输中的实际应用价值。

下一篇文章将介绍NetBIOS的原理及在网络通信中的应用,同时讲解如何在W55MH32芯片上实现NetBIOS功能,敬请期待!

WIZnet是一家无晶圆厂半导体公司,成立于 1998年。产品包括互联网处理器 iMCU™,它采用 TOE(TCP/IP卸载引擎)技术,基于独特的专利全硬连线 TCP/IP。iMCU™面向各种应用中的嵌入式互联网设备。

WIZnet在全球拥有 70多家分销商,在香港、韩国、美国设有办事处,提供技术支持和产品营销。

香港办事处管理的区域包括:澳大利亚、印度、土耳其、亚洲(韩国和日本除外)。

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • SMTP
    +关注

    关注

    0

    文章

    33

    浏览量

    12275
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    第二十六章 W55MH32 上位机搜索和配置示例

    本文讲解了如何在 W55MH32 芯片上实现上位机搜索和配置功能,通过实战例程展示了使用开源上位机配置工具 SmartConfigTool 搜索局域网中的 W55MH32 并进行网络地址配置的过程
    的头像 发表于 07-24 16:13 294次阅读
    第二十六章 <b class='flag-5'>W55MH32</b> 上位机搜索和配置<b class='flag-5'>示例</b>

    第二十一章 W55MH32 PHY配置示例

    本文讲解了如何在 W55MH32 芯片上设置不同的 PHY 模式,通过实战例程展示了根据不同传输场景,将 PHY 模式在 100Mbps 全双工、10Mbps 半双工和掉电模式之间切换以降
    的头像 发表于 07-24 13:44 342次阅读
    第二<b class='flag-5'>十一章</b> <b class='flag-5'>W55MH32</b> PHY配置<b class='flag-5'>示例</b>

    第十八章 W55MH32 FTP_Server示例

    本文讲解了如何在 W55MH32 芯片上实现 FTP 协议的服务器模式,通过实战例程展示了使用 W55MH32 作为 FTP 服务器与 PC 端进行文件传输、目录操作等功能的过程,涵盖获取网络配置
    的头像 发表于 07-24 11:55 208次阅读
    <b class='flag-5'>第十</b>八章 <b class='flag-5'>W55MH32</b> FTP_Server<b class='flag-5'>示例</b>

    第十七章 W55MH32 ARP示例

    文讲解了如何在 W55MH32 芯片上通过 MAC RAW 模式实现 ARP 协议,将 IP 地址解析为 MAC 地址,通过实战例程展示了从发送 ARP 请求到接收并处理响应的完整过程。文章详细介绍
    的头像 发表于 07-24 11:49 279次阅读
    <b class='flag-5'>第十</b>七章 <b class='flag-5'>W55MH32</b> ARP<b class='flag-5'>示例</b>

    第十六章 W55MH32 PING示例

    本文讲解了如何在 W55MH32 芯片上通过 IPRAW 模式实现 ICMP 协议中的 PING 命令,以进行网络连通性测试,通过实战例程展示了从发送 PING 请求、接收并解析回复到统计结果的完整
    的头像 发表于 07-24 11:41 193次阅读
    <b class='flag-5'>第十</b>六章 <b class='flag-5'>W55MH32</b> PING<b class='flag-5'>示例</b>

    第十五章 W55MH32 SNMP示例

    本文讲解了如何在 W55MH32 芯片上实现 SNMP 功能,通过实战例程展示了使用 MIB Browser 管理 W55MH32 的具体过程,涵盖在 MIB Browser 中创建分支、添加叶子
    的头像 发表于 07-24 10:43 343次阅读
    <b class='flag-5'>第十</b>五章 <b class='flag-5'>W55MH32</b> SNMP<b class='flag-5'>示例</b>

    第十四章 W55MH32 TFTP示例

    本文讲解了如何在 W55MH32 芯片上实现 TFTP 协议,通过实战例程详细展示了使用 TFTP 客户端模式从服务器获取文本文件的过程,涵盖 TFTP 初始化、发送读请求、运行协议并处理结果等核心
    的头像 发表于 07-24 10:37 298次阅读
    <b class='flag-5'>第十</b>四章 <b class='flag-5'>W55MH32</b> TFTP<b class='flag-5'>示例</b>

    第十三章 W55MH32 UPnP端口转发示例

    本文讲解了如何在 W55MH32 芯片上实现 UPnP 协议的端口转发功能,通过实战例程详细展示了从设备搜索、获取设备描述、订阅事件到添加和删除端口映射的完整流程,包括各步骤涉及的协议报文、函数实现
    的头像 发表于 07-24 10:28 347次阅读
    <b class='flag-5'>第十</b>三章 <b class='flag-5'>W55MH32</b> UPnP端口转发<b class='flag-5'>示例</b>

    第十二章 W55MH32 NetBIOS示例

    本文讲解了如何在 W55MH32 芯片上实现 NetBIOS 功能,通过实战例程展示了利用 NetBIOS 进行名称 PING 测试的具体过程,包括 NetBIOS 功能的调用、请求处理、名称解析
    的头像 发表于 07-24 09:58 323次阅读
    <b class='flag-5'>第十</b>二章 <b class='flag-5'>W55MH32</b> NetBIOS<b class='flag-5'>示例</b>

    第十W55MH32 SNTP示例

    本文讲解了如何在W55MH32芯片上实现SNTP授时功能,通过实例详细展示了从SNTP服务器同步时间的实现流程,包括时间请求、响应解析和本地时间校准等核心步骤。文章还对SNTP的应用场景进行了分析,帮助读者理解其在时间同步中的实际应用价值。
    的头像 发表于 07-24 09:43 425次阅读
    <b class='flag-5'>第十</b>章 <b class='flag-5'>W55MH32</b> SNTP<b class='flag-5'>示例</b>

    第九章 W55MH32 HTTP Server示例

    本文介绍了在 W55MH32 芯片上实现 HTTP Server 功能,并通过浏览器修改其网络地址信息的方法。阐述了 HTTP 协议的概念、特点、应用场景、工作流程、请求方法、响应内容,以及 Web 页面构成和交互方式。展示了在W55MH32上实现的过程。
    的头像 发表于 07-24 09:35 275次阅读
    第九章 <b class='flag-5'>W55MH32</b> HTTP Server<b class='flag-5'>示例</b>

    第五章 W55MH32 UDP示例

    本文介绍了在 W55MH32 芯片上实现 UDP 通信及数据回环测试的方法。阐述了 UDP 协议的概念、特点、应用场景、报文传输流程和报文结构,展示了实现过程,借助网络调试工具完成测试。
    的头像 发表于 07-24 09:13 241次阅读
    第五章 <b class='flag-5'>W55MH32</b> UDP<b class='flag-5'>示例</b>

    第二章 W55MH32 DHCP示例

    本文介绍 DHCP 协议,包括其在 IP 网络自动分配参数的功能、便捷配置等特点、工作原理、报文格式和应用场景。通过 W55MH32 实战例程展示动态获取网络地址信息过程,含注册定时器中断、启用模式和获取信息等步骤,烧录后可完成检测与信息打印,PC 端能 PING 通设备。
    的头像 发表于 07-24 09:02 336次阅读
    第二章 <b class='flag-5'>W55MH32</b> DHCP<b class='flag-5'>示例</b>

    WIZnet W55MH32以太网单片机开发教程第十一章 通用定时器(下篇)

    本章为W55MH32通用定时器的下篇,介绍了TIM_InputCapture 等 4 个程序设计例程,涉及输入捕获、PWM 输出、中断测试、触摸检测等功能和例程下载验证情况,如串口输出、波形检测等。
    的头像 发表于 05-28 10:48 631次阅读
    WIZnet <b class='flag-5'>W55MH32</b>以太网单片机开发教程<b class='flag-5'>第十一章</b> 通用定时器(下篇)

    WIZnet W55MH32以太网单片机开发教程 第十一章 通用定时器(上篇)

    本章介绍了W55MH32的通用定时器TIM2~TIM5,其由 16 位计数器等构成,具输入捕获等功能,有多种计数模式及时钟选择。对例程进行了讲解并下载验证,TIM9~14功能类似,详见《W55MH32参考手册》。
    的头像 发表于 05-28 10:12 573次阅读
    WIZnet <b class='flag-5'>W55MH32</b>以太网单片机开发教程 <b class='flag-5'>第十一章</b> 通用定时器(上篇)