1. 关于使用外设库和芯片选择
需定义USE_STDPERIPH_DRIVER和STM32F40_41xxx
具体在stm32f4xx.h定义或者Target Options里配置
2. 关于时钟配置
本工程外部晶振使用8M
因此需要修改外部晶振以及PLL相关的宏定义
stm32f4xx.h里配置
#define HSE_VALUE ((uint32_t)8000000)
system_stm32f4xx.c里配置
#define PLL_M 8
3. 移植lwip,无RTOS
第一步, ETH_MAC_DMA的初始化,PHY芯片的初始化,这里在工程f407_eth里测试
第二步, 添加lwip文件
src里是lwip官方库里的文件:
lwip-1.4.1\src
port里的是st官方的移植文件:
STM32F4x7_ETH_LwIP_V1.1.1\Utilities\Third_Party\lwip-1.4.1\port\STM32F4x7
移植网络应用文件:
STM32F4x7_ETH_LwIP_V1.1.1\Project\Standalone\udp_echo_client
第三步, 修改部分文件
main.h 改为
net_config.h 配置IP/MAC/NETMASK/GW/DHCP等 这里不使用DHCP
无操作系统时需要初始化systick来给lwip作时基,在main函数里初始化,并实现SysTick_Handler
ethernetif.c是无RTOS时需要移植的文件(st已经弄好了),其实就是初始化、发送、接收
关键字:STM32F407 LWIP
引用地址:
STM32F407+LWIP
推荐阅读最新更新时间:2024-03-16 16:11
STM32F407输出多路PWM波
主控,淘宝黑色STM32F407板子 编译器 IAR 目标要求 输出四路PWM波 这里把写好的H和C文件给大家了,只需要在main里面简单的调用一下函数即可实现四路PWM的输出 在main里面加入 PWM_Init(); Updata_PWM_(20,200,500,600); //即可得到2%,20%,50%,60%的PWM波 #include PWM.h // 输出四路PWM波 //----------------------------2016/11/26--陈勃瑄 // void PWM_Init(void) // void Updata_PWM_(float DC1,float DC2,float D
[单片机]
如何在嵌入式实时操作系统uC/0SII上移植实现LwIP
1 引言 随着嵌入式系统与网络的日益结合,在嵌入式实时操作系统中引入TCP/IP协议栈,以支持嵌入式设备接入网络,成为嵌入式领域重要的研究方向。uC/0S II是近年来发展迅速的一个开放源码实时操作系统,但它只是一个实时的任务调度及通信内核,缺少对外围设备和接口的支持,如没有文件系统、网络协议、图形界面。笔者在多个嵌入式项目的开发过程中,以开源TCP/IP协议栈LwIP为基础,给uC/0S II加上了网络支持。下面就以uC/0S II +LwIP分别在8位MCU ez80和32位MCU ARM7TDMI上的实现为例进行说明。 需要说明的是,笔者使用的ez80系统是Zilog公司的ez80190开发板,自带网络芯片。
[单片机]
【stm32f407】轮序方式的按键应用
1. 硬件原理图: 可以看到user button是PA0 2. 程序步骤 1) 使能按键对应IO口时钟。 PA0在AHB1总线上 调用函数:RCC_AHB1PeriphClockCmd (); 2) 初始化IO模式:上拉/下拉输入。 3) 扫描IO口电平 3. 程序原码 key.h #ifndef _KEY_H_H_H #define _KEY_H_H_H #include stm32f4xx_gpio.h #include stm32f4xx_rcc.h #define KEY_ON 0 #define KEY_OFF 1 void KEY_Init(void); ui
[单片机]
STM32F407 关于TIM1输出PWM
通过 CCxE、 CCxNE、 MOE、 OSSI 和 OSSR 位(TIMx_CCER 和TIMx_BDTR 寄存器)的组合使能 OCx 输出。实际上,需要将TIMx_BDTR 寄存器的 MOE和AOE位置1。这就是和普通配置PWM输出的不同点。代码如下↓ /******************************************************************* * 功 能: * 作 者: Jahol Fan * 参 数: * 返回值: * 其 他: PA9 PWM输出控制转速,PA9的复用功能1是TIM1_CH2, TIM1:168MHZ *****************
[单片机]
STM32开发笔记63: 在LwIP中不使用MicroLIB
单片机型号:STM32F407VGT6 文章STM32开发笔记62: 使用MicroLIB介绍了microLIB的使用方法,如果在项目中使用LwIP的话,默认是使用microLIB的,如果不勾选microLIB选项,则程序不能够正常运行,其主要原因在于LwIP使用了microLIB提供的标准输入和输出函数。但是,非常遗憾的是microLIB不支持C++,如果在应用程序中希望使用C++进行程序设计,则不能勾选microLIB,否则在链接的时候会出现问题,本文提供解决这一问题的方法。 不勾选microLIB,keil将使用标准C库函数进行链接,这就需要我们提供相应的低层支持才可以。ARM公司提供了相应的模版,我们可以通过htt
[单片机]
LwIP在STM32上TCP通讯速度
使用LwIP容易,但要想使用LwIP获得好的的速度。LwIP做一个如下修改,会让TCP网络速度好一些: lwipopts.h文件 /* TCP Maximum segment size. */ #define TCP_MSS 2048//1024 /* TCP sender buffer space (bytes). */ #define TCP_SND_BUF 2048//1024 /* TCP sender buffer space (pbufs). This must be at least = 2 * TCP_SND_BUF/TCP_MSS for things to wor
[单片机]
stm32f407 adc的dma中断方式
#include adc.h /* 数据定义 */ u8 UpdataTIM = 0; //更新TIM2定时器标志 u16 CurrentFreq = 500;//默认市电频率,单位为0.1hz ADBASE_TYPE uAD_Buff_A ; //ADC采集缓存A ADBASE_TYPE uAD_Buff_B ; //ADC采集缓存B //考虑到可能出现的数据处理时间较长的问题,临时添加缓存 //u16 uAD_IN_BUFF ; ADBASE_TYPE *CurrentBuffPtr = NULL; //当前缓存指针 /* * Function : static void ADCInit_GPIO(
[单片机]
STM32F103与STM32F407的SPI调试笔记
在写入SPI数据数,必须调用 SPI_I2S_ReceiveData(SPI1);读取一次,不然会对数据的读取不正确 u8 SPI_Flash_GetChar(void){ u8 Data = 0; Data = SPI_I2S_ReceiveData(SPI1);//必须读取一次,应该是读后清空寄存器 while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET); //SPI_I2S_ClearITPendingBit(SPI1,SPI_I2S_FLAG_TXE); SPI_I2S_SendData(SPI1, 0xff); while (S
[单片机]