stm32的eth原理
⑴ STM32 網路Ethernet)介面中ETH_PPS_OUT管腳的作用是什麼
STM32神舟IV號是RMII的,你可以找一下他的原理圖,網卡晶元是DM9161AE
⑵ 如何使用STM32CubeMX配置ETH
具體配置過程:
1、打開STM32CubeMX,並選擇好相應的晶元。文中的晶元為STM32F207VCT6,選擇後如下圖:
2、配置RCC時鍾、ETH、PA8以及使能LWIP;
由於此處我們的開發板硬體上為RMII方式,因此選擇ETH-RMII,若有同志的開發板為MII方式,請參考MII的配置方法,此處只針對RMII;
RCC選擇外部時鍾源,另外勾選MCO1,軟體會自動將PA8配置為MCO1模式,該引腳對於RMII方式很重要,用於為PHY晶元提供50MHz時鍾;
使能LWIP;
3、時鍾樹的相關配置,必須保證MCO1輸出為50Mhz,如果這個頻率不對會導致PHY晶元無法工作;
我這里因為晶元為207VCT6,為了使MCO1輸出為50Mhz,做了PLL倍頻參數的一些調整,總體如下:(同志們配置時可根據自己的晶元靈活配置,但需保證MCO1的輸出為50Mhz)
4、ETH、LWIP、RCC相關參數設置;
至此,比較重要的都在前面了,但是還有一點仍需要注意,即PA8引腳輸出速度,幾次不成功都是因為這個引腳沒注意。
後續的參數設置可以根據同志們自己的需求分別設置,這里給出我的設置供參考;
ETH參數保持默認,但中斷勾選一下;
LWIP參數設置如下:(因為我這里是配置UDP伺服器,IP選擇靜態分配)
5、生成工程,做最後的函數修改;
給生成的工程添加UDP伺服器的初始化以及埠綁定等相關函數;
我這里直接將之前的官方常式中的UDP伺服器文件加進來,如下:
之後將.c文件添加到用戶程序,主函數添加Udp的.h頭文件;如下:(udp文件的具體內容在後面給出)
6、主函數還需要添加一下幾個函數,在這里不對函數作用及實現原理講解,僅做添加說明。
附:udp_echoserver相關文件內容(該文件為官方的示常式序,版權歸官方,此處做轉載)
udp_echoserver.c的內容如下:
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "lwip/pbuf.h"
#include "lwip/udp.h"
#include "lwip/tcp.h"
#include <string.h>
#include <stdio.h>
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
#define UDP_SERVER_PORT 7 /* define the UDP local connection port */
#define UDP_CLIENT_PORT 7 /* define the UDP remote connection port */
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
void udp_echoserver_receive_callback(void *arg, struct udp_pcb *upcb, struct pbuf *p, const ip_addr_t *addr, u16_t port);
/* Private functions ---------------------------------------------------------*/
/**
* @brief Initialize the server application.
* @param None
* @retval None
*/
void udp_echoserver_init(void)
{
struct udp_pcb *upcb;
err_t err;
/* Create a new UDP control block */
upcb = udp_new();
if (upcb)
{
/* Bind the upcb to the UDP_PORT port */
/* Using IP_ADDR_ANY allow the upcb to be used by any local interface */
err = udp_bind(upcb, IP_ADDR_ANY, UDP_SERVER_PORT);
if(err == ERR_OK)
{
/* Set a receive callback for the upcb */
udp_recv(upcb, udp_echoserver_receive_callback, NULL);
}
}
}
/**
* @brief This function is called when an UDP datagrm has been received on the port UDP_PORT.
* @param arg user supplied argument (udp_pcb.recv_arg)
* @param pcb the udp_pcb which received data
* @param p the packet buffer that was received
* @param addr the remote IP address from which the packet was received
* @param port the remote port from which the packet was received
* @retval None
*/
void udp_echoserver_receive_callback(void *arg, struct udp_pcb *upcb, struct pbuf *p, const ip_addr_t *addr, u16_t port)
{
/* Connect to the remote client */
udp_connect(upcb, addr, UDP_CLIENT_PORT);
/* Tell the client that we have accepted it */
udp_send(upcb, p);
/* free the UDP connection, so we can accept new clients */
udp_disconnect(upcb);
/* Free the p buffer */
pbuf_free(p);
}
udp_echoserver.h的內容如下:
#ifndef __ECHO_H__
#define __ECHO_H__
void udp_echoserver_init(void);
#endif /* __MINIMAL_ECHO_H */
7、至此,所有的工作完成,編譯工程,下載至開發板。由於udp_echoserver中綁定的埠號為7,這里我們通過測試工具測試網路的功能
⑶ 在stm32中 REMOTE模塊有什麼用
在STM32微控制器中,REMOTE模塊主要用於實現遠程通信,其具體作用包括以下幾個方面:
無線通信:
- REMOTE模塊支持藍牙、Wi-Fi、NFC等無線通信協議,使STM32能夠與智能手機、平板電腦、其他微控制器等設備進行無線通信,擴展了設備的連接性和交互性。
遠程式控制制:
- 通過REMOTE模塊,STM32可以接收來自遠程式控制制器的指令,實現遠程式控制制功能。這在智能家居控制系統、遠程監控等場景中尤為重要,提高了系統的靈活性和便捷性。
數據傳輸:
- REMOTE模塊可用於數據傳輸,將STM32採集到的數據(如感測器數據)傳輸到其他設備,或者將其他設備的數據傳輸到STM32進行處理。這有助於實現數據的集中管理和分析。
設備間通信:
- REMOTE模塊支持設備間通信,使得多個STM32設備可以組成一個網路,實現相互之間的通信和數據交換。這在分布式系統或物聯網應用中具有重要意義。
遠程升級:
- REMOTE模塊還支持遠程固件升級,使得STM32設備可以通過遠程方式更新其固件。這提高了系統的可維護性和靈活性,降低了現場維護的成本。
常見的REMOTE模塊類型及其在STM32中的應用包括:
- USART/UART:用於實現串列通信,適用於簡單的點對點通信場景。
- SPI:用於高速數據傳輸,適用於與外設(如感測器、存儲器等)的通信。
- I2C:用於低速數據傳輸,適用於與多個設備的通信。
- CAN:用於汽車和其他工業應用中的高速通信,具有錯誤檢測和容錯功能。
- USB:用於高速數據傳輸,適用於與PC或其他USB設備通信。
- ETH:用於高速網路通信,支持TCP/IP協議,適用於與網路設備通信。
在設計和開發過程中,需要根據具體應用需求選擇合適的REMOTE模塊,以實現所需的通信功能和性能。
⑷ STM32 + IAP + Ymodem完美結合
軟體工程師在進行代碼升級或程序更新時,需掌握基礎知識。本文將通過介紹ISP、ICP、IAP概念,並結合STM32官方提供的Demo,解釋編程內容。
首先,ISP(In System Programing)指的是在系統編程,如使用STC-ISP對STC晶元編程,或使用Flash loader對STM32編程等。ISP程序一般在晶元內部固化了一段用於升級的boot程序。
其次,ICP(In Circuit Programing)和ICSP(In-Circuit Serial Programming)指的是在電路編程,幾乎任何處於編程狀態的晶元都需要上電且處於電路中,如對EEPROM編程。利用J-Link、ST-Link、e-Link32等工具進行編程也屬於此范疇。
最後,IAP(In Applicating Programing)是用戶程序運行時對User Flash部分區域進行燒寫,旨在方便在產品發布後通過預留通信口更新固件程序。IAP通信口包括UART串口、ETH乙太網、I2C、SPI等。
結合STM32官網提供的常式,本文將利用UART在IAP中實現代碼程序的數據傳輸和寫入Flash。常式採用STM32F1、SPL庫、UART通信口,通過YModem協議進行文件傳輸。
常式包括代碼概要、IAP軟體工程、程序編譯與下載。程序放置於0x0800 0000起始地址,分為IAP程序區域與APP程序區域。IAP程序負責將應用程序二進制文件寫入Flash,同時具備引導程序跳轉至應用程序的功能。為防止意外破壞,IAP程序應進行「防寫」。
程序地址0x0800 3000是通過按鍵方式選擇執行IAP或APP程序。建議設置倒計時(如5秒)以選擇下載程序,否則自動執行APP程序。在IAP程序代碼中實現此功能。
本文將分章節詳細解釋IAP程序與APP程序的代碼修改與地址設置,包括向量表偏移、配置修改、生成Bin文件和程序代碼生成。
最後,介紹超級終端安裝與程序下載。使用HyperTerminal或SecureCRT終端進行下載與安裝,並提供硬體連接步驟、文件下載與執行程序的流程。
本文全面解析了STM32 + IAP + Ymodem的結合應用,為軟體工程師提供基礎知識與常式說明,旨在幫助用戶更好地理解和實施代碼升級與程序更新。