CH390H+STM32F1+LWIP

news2024/9/23 5:22:52

文章目录

  • 1、CH390芯片介绍
  • 2、电路部分
  • 3、LWIP调试
    • 3.1修改点1
    • 3.2 修改点2
  • 4、结果展示
  • 参考

1、CH390芯片介绍

官网地址: 南京沁恒微电子股份有限公司
在这里插入图片描述
特点:
在这里插入图片描述

2、电路部分

CH390及接口:
在这里插入图片描述
STM32F1引脚:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
不含LWIP的demo及LWIP调通demo下载地址:CH390H+STM32F1程序,其中包含无LWIP和有LWIP的两个工程

3、LWIP调试

商家给的demo程序已包含LWIP源码,只是没有用,搞不懂,不知道是不是没调通还是想另收费。

3.1修改点1

LWIP源码不需要做任何修改,唯一需要用户自己实现的就是ethernetif.c中的sys_new()和sys_jiffies(void)函数,有用RTC实现功能的,我这里使用TIM2实现1ms定时。

void TIM2_Init(unsigned int arr, unsigned int psc)
{	
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
	NVIC_InitTypeDef NVIC_InitStructure;
	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //时钟使能
  TIM_ClearITPendingBit(TIM2,TIM_IT_Update);//清除中断标志位
 
	TIM_TimeBaseStructure.TIM_Period = arr; //自动重装载周期值	
	TIM_TimeBaseStructure.TIM_Prescaler =psc; //预分频值  
	TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
	TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx
 
	TIM_ITConfig(  TIM2,TIM_IT_Update,  ENABLE  );//使能更新触发TIM中断
 
	//中断分组设置
	NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;  //TIM2中断
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;  //先占优先级0级
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  //从优先级3级
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
	NVIC_Init(&NVIC_InitStructure);  //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
 
	TIM_Cmd(TIM2, ENABLE);  //使能TIMx外设
							 
}

uint32_t cnt=0;
void TIM2_IRQHandler(void)
{
   if(TIM_GetITStatus(TIM2,TIM_IT_Update) != RESET) //溢出中断
   {
				cnt++;
		    if(cnt>=0x7FFFFFFF)
				{
				   cnt=0;
				}
   }
   TIM_ClearITPendingBit(TIM2,TIM_IT_Update); //清除中断标志位
}
extern uint32_t cnt;
u32_t sys_now(void)
{
    //return ((RTC->CNTH << 16) | RTC->CNTL);
	  return cnt;
}

u32_t sys_jiffies(void)
{   
    //return ((RTC->CNTH << 16) | RTC->CNTL);
	  return cnt;
}

3.2 修改点2

在这里插入图片描述
这里有个大坑,也不知道什么原因,之前一直没调通,问商家也没用,不提供技术支持,后面把这个去掉就正常了
以上就是全部修改点,简单吧,源码不在这里大量展示,可以去下载整个工程。

4、结果展示

ping结果:
在这里插入图片描述

回显数据:(板子书TCP server)
在这里插入图片描述
串口打印结果:
在这里插入图片描述

参考

LwIP应用开发笔记之五:LwIP无操作系统TCP服务器
https://www.cnblogs.com/foxclever/p/11921555.html
【WCH以太网接口系列芯片】STM32+CH390+Lwip协议栈简单应用测试:
https://www.cnblogs.com/sw111/p/18112004

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1930022.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据安全评估师CCRC-DSA:数据安全如何“护航”创新发展

在2024年的中关村论坛年会关于数据安全治理与发展的讨论中&#xff0c;新加坡资讯通信媒体发展局局长柳俊泓指出&#xff0c;根据预测&#xff0c;今年全球将产生约147泽字节的数据量&#xff0c;这意味着每个地球上的人都拥有相当于150部iPhone的数据量。 柳俊泓强调&#xf…

【Linux网络】poll{初识poll / poll接口 / poll vs select / poll开发多客户端echo服务器}

文章目录 1.初识pollpoll与select的主要联系与区别poll的原理poll的优点poll的缺点poll vs select 2.poll开发多客户端echo服务器封装套接字接口Makefile主函数日志服务聊天服务器 1.初识poll poll是Linux系统中的一个系统调用&#xff0c;它用于监控多个文件描述符&#xff08…

RocketMQ实现分布式事务

RocketMQ的分布式事务消息功能&#xff0c;在普通消息基础上&#xff0c;支持二阶段的提交。将二阶段提交和本地事务绑定&#xff0c;实现全局提交结果的一致性。 1、生产者将消息发送至RocketMQ服务端。 2、RocketMQ服务端将消息持久化成功之后&#xff0c;向生产者返回Ack确…

2. LangChain4j 之AI Services

一: AI Services介绍 LangChain4j提供了很多基础的组件&#xff0c;每次使用都需要你编写大量的样板代码&#xff0c;LangChain4j就提供了一个高级的组件AI Services&#xff0c;它可以简化与大模型(LLM)和其他组件交互的复杂度。让开发者更专注于业务逻辑&#xff0c;而不是底…

【JavaScript】聊一聊js中的浅拷贝与深拷贝与手写实现

前言 什么是深拷贝与浅拷贝&#xff1f;深拷贝与浅拷贝是js中处理对象或数据复制操作的两种方式。‌在聊深浅拷贝之前咱得了解一下js中的两种数据类型&#xff1a; 基本数据类型&#xff08;6种&#xff09;String、Number、Object、Boolean、null、undefined、symbol&#xff…

李秘书讲写作:面对交通违规处罚不当或误判时怎么办?

李秘书讲写作&#xff1a;面对交通违规处罚不当或误判时怎么办&#xff1f; #李秘书讲写作#在这节讲三个问题&#xff0c;最后一个问题对你非常有用&#xff01;不信请看&#xff1a; 一、个人交通违规处罚不当或误判一般有哪些情形&#xff1f; 在现代社会&#xff0c;交通违规…

框架设计MVP

重点&#xff1a; 1.presenter里面包含view和model 2.和MVP不同的是View和Model之间不进行交互 3.view包含presenter,view通过presenter反向处理逻辑。 链接&#xff1a; MVP简单实现_安卓mvp presenter-CSDN博客 Model.h #pragma once //Model数据处理器 class Model { …

Java、Python、C语言?5大热门编程语言,我该怎么选?

在开始前分享一些编程的资料需要的同学评论888即可拿走 是我根据网友给的问题精心整理的一提到编程&#xff0c;大家就会想到一堆莫名其妙的缩写&#xff0c;比如C、C、JAVA、VB、VC、FoxPro、Delphi、SQL、PHP、ASP、JSP等等&#xff0c;那么编程语言究竟多少种呢&#xff1f;…

数据库:redis练习题

1、安装redis&#xff0c;启动客户端、验证。 redis-server redis-cli 2、string类型数据的命令操作&#xff1a; &#xff08;1&#xff09; 设置键值&#xff1a; set mykey "haha" &#xff08;2&#xff09; 读取键值&#xff1a; get mykey &#xff08;3&…

算法金 | 来了,pandas 2.0

大侠幸会&#xff0c;在下全网同名「算法金」 0 基础转 AI 上岸&#xff0c;多个算法赛 Top 「日更万日&#xff0c;让更多人享受智能乐趣」 今日 210/10000 Pandas 是一个强大的数据分析库&#xff0c;广泛应用于科学研究、金融分析、商业智能等领域。它提供了高效的数据结构…

Jmeter常用组件及执行顺序

一 常用组件 1.线程组 Thread Group 线程组是一系列线程的集合&#xff0c;每一个线程代表着一个正在使用应用程序的用户。在 jmeter 中&#xff0c;每个线程意味着模拟一个真实用户向服务器发起请求。 在 jmeter 中&#xff0c;线程组组件运行用户设置线程数量、初始化方式等…

明日周刊-第16期

最近很想去看一场蔡健雅的演唱会&#xff0c;以前从来没去过演唱会。原先是想把第一次机会留给周杰伦的演唱会&#xff0c;但是周董的票太难抢了。 文章目录 一周热点资源分享言论歌曲推荐 一周热点 一、经济与市场 北京二手房价环比上涨&#xff1a; 6月份&#xff0c;北京二…

JavaScript原型

前言 **原型的使用&#xff1a;**可以通过原型对象来添加共享的方法&#xff0c;这样所有通过该构造函数创建的对象实例都可以访问和使用这些方法。 举例 ● 例如我们现在想在构造函数中添加一个计算年龄的方法&#xff0c;并且这个方法可以让所有的对象实例都可以访问到 P…

C++基础篇(2)

目录 前言 1.缺省参数 2.函数重载 2.1函数重载的基本规则 ​编辑2.2注意事项 2.3 重载解析&#xff08;Overload Resolution&#xff09;--补充内容 3.引用 3.1引用的概念和定义 3.2引用的特性 3.3引用的使用 3.4const引用 4.指针和引用的关系 结束语 前言 上节小编…

互联网末法时代的一些思考

这篇文章也是临时起意&#xff0c;很长一段时间没写个人思考类的文章&#xff0c;主要原因也是时间完全不够用。随着年龄的增长&#xff0c;看待问题的视角也逐渐发生变化&#xff0c;例如从关注现象到关注动机&#xff0c;从关注结果到关注起因&#xff0c;2021年的时代我曾经…

前端设计模式:教科书般的实践指南

前端设计模式&#xff1a;教科书般的实践指南 引言 亲爱的前端小伙伴们&#xff0c;你们是否曾经在代码的海洋中迷失方向&#xff1f;是否曾经被项目经理的"简单需求"折磨得欲仙欲死&#xff1f;别担心&#xff0c;今天我们就来聊聊那些能让你在前端江湖中纵横捭阖…

Qt程序图标更改以及程序打包

Qt程序图标更改以及程序打包 1 windows1.1 cmake1.1.1 修改.exe程序图标1.1.2 修改显示页面左上角图标 1.2 qmake1.2.1 修改.exe程序图标1.2.2 修改显示页面左上角图标 2 程序打包2.1 MinGW2.2 Visual Studio 3 参考链接 QT6 6.7.2 1 windows 1.1 cmake 1.1.1 修改.exe程序图…

新书速览|深入理解Hive:从基础到高阶:视频教学版

《深入理解Hive&#xff1a;从基础到高阶&#xff1a;视频教学版》 本书内容 《深入理解Hive:从基础到高阶:视频教学版》采用“理论实战”的形式编写&#xff0c;通过大量的实例&#xff0c;结合作者多年一线开发实战经验&#xff0c;全面地介绍Hive的使用方法。《深入理解Hiv…

昂科烧录器支持Hynetek慧能泰半导体的三端口控制器HUSB366

芯片烧录行业领导者-昂科技术近日发布最新的烧录软件更新及新增支持的芯片型号列表&#xff0c;其中Hynetek慧能泰半导体的三端口控制器HUSB366已经被昂科的通用烧录平台AP8000所支持。 HUSB366是一款高性能、高集成度的双USB Type-C和一个USB Type-A三端口控制器&#xff0c;…

如何将电子书发送到kindle

修改guide Amazon之kindle 修改邮箱 参考&#xff1a; blog 多种方式&#xff1a;如何将电子书发送到kindle