Refactoring
This commit is contained in:
parent
708ac5f80a
commit
f34adc5973
158
app/main.c
158
app/main.c
@ -3,98 +3,6 @@
|
|||||||
#include <pb_decode.h>
|
#include <pb_decode.h>
|
||||||
#include "simple.pb.h"
|
#include "simple.pb.h"
|
||||||
|
|
||||||
void MX_GPIO_Init(void)
|
|
||||||
{
|
|
||||||
RCC_AHB1PeriphClockCmd(
|
|
||||||
RCC_AHB1Periph_GPIOA |
|
|
||||||
RCC_AHB1Periph_GPIOB |
|
|
||||||
RCC_AHB1Periph_GPIOC |
|
|
||||||
RCC_AHB1Periph_GPIOD |
|
|
||||||
RCC_AHB1Periph_GPIOG,
|
|
||||||
ENABLE
|
|
||||||
);
|
|
||||||
|
|
||||||
const uint16_t led_pins = GPIO_Pin_0 | GPIO_Pin_7 | GPIO_Pin_14;
|
|
||||||
GPIO_InitTypeDef gpio;
|
|
||||||
|
|
||||||
GPIO_StructInit(&gpio);
|
|
||||||
gpio.GPIO_Mode = GPIO_Mode_OUT;
|
|
||||||
gpio.GPIO_Pin = led_pins;
|
|
||||||
GPIO_Init(GPIOB, &gpio);
|
|
||||||
GPIO_ResetBits(GPIOB, led_pins);
|
|
||||||
}
|
|
||||||
|
|
||||||
void MX_USART2_UART_Init(void)
|
|
||||||
{
|
|
||||||
|
|
||||||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
|
||||||
|
|
||||||
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
|
|
||||||
|
|
||||||
GPIO_InitTypeDef gpio;
|
|
||||||
|
|
||||||
const uint16_t usart_pins = GPIO_Pin_5 | GPIO_Pin_6;
|
|
||||||
gpio.GPIO_Mode = GPIO_Mode_AF;
|
|
||||||
gpio.GPIO_Pin = usart_pins;
|
|
||||||
gpio.GPIO_Speed = GPIO_Speed_50MHz;
|
|
||||||
gpio.GPIO_OType = GPIO_OType_PP;
|
|
||||||
gpio.GPIO_PuPd = GPIO_PuPd_UP;
|
|
||||||
GPIO_Init(GPIOD, &gpio);
|
|
||||||
|
|
||||||
GPIO_PinAFConfig(GPIOD, GPIO_PinSource5, GPIO_AF_USART2);
|
|
||||||
GPIO_PinAFConfig(GPIOD, GPIO_PinSource6, GPIO_AF_USART2);
|
|
||||||
|
|
||||||
// NVIC_SetPriority(USART2_IRQn, 0);
|
|
||||||
// NVIC_EnableIRQ(USART2_IRQn);
|
|
||||||
|
|
||||||
USART_InitTypeDef usart;
|
|
||||||
usart.USART_BaudRate = 115200;
|
|
||||||
usart.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
|
|
||||||
|
|
||||||
USART_Init(USART2, &usart);
|
|
||||||
USART_Cmd(USART2, ENABLE);
|
|
||||||
}
|
|
||||||
|
|
||||||
void SystemClock_Config();
|
|
||||||
|
|
||||||
void eth_init() {
|
|
||||||
|
|
||||||
RCC_AHB1PeriphClockCmd(RCC_AHB1ENR_ETHMACEN, ENABLE);
|
|
||||||
RCC_AHB1PeriphClockCmd(RCC_AHB1ENR_ETHMACRXEN, ENABLE);
|
|
||||||
RCC_AHB1PeriphClockCmd(RCC_AHB1ENR_ETHMACTXEN, ENABLE);
|
|
||||||
|
|
||||||
GPIO_InitTypeDef gpio;
|
|
||||||
|
|
||||||
gpio.GPIO_Mode = GPIO_Mode_AF;
|
|
||||||
gpio.GPIO_Speed = GPIO_Speed_100MHz;
|
|
||||||
gpio.GPIO_OType = GPIO_OType_PP;
|
|
||||||
gpio.GPIO_PuPd = GPIO_PuPd_NOPULL;
|
|
||||||
|
|
||||||
gpio.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_7;
|
|
||||||
GPIO_Init(GPIOA, &gpio);
|
|
||||||
GPIO_PinAFConfig(GPIOA, GPIO_PinSource1, GPIO_AF_ETH); //RMII ref clock
|
|
||||||
GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_ETH); //RMII MDIO
|
|
||||||
GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_ETH); //RMII RX Data Valid
|
|
||||||
|
|
||||||
gpio.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5;
|
|
||||||
GPIO_Init(GPIOC, &gpio);
|
|
||||||
GPIO_PinAFConfig(GPIOC, GPIO_PinSource1, GPIO_AF_ETH); //RMII MDC
|
|
||||||
GPIO_PinAFConfig(GPIOC, GPIO_PinSource4, GPIO_AF_ETH); //RMII RXD0
|
|
||||||
GPIO_PinAFConfig(GPIOC, GPIO_PinSource5, GPIO_AF_ETH); //RMII RXD1
|
|
||||||
|
|
||||||
gpio.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_13;
|
|
||||||
GPIO_Init(GPIOG, &gpio);
|
|
||||||
GPIO_PinAFConfig(GPIOG, GPIO_PinSource11, GPIO_AF_ETH); //RMII TX enable
|
|
||||||
GPIO_PinAFConfig(GPIOG, GPIO_PinSource13, GPIO_AF_ETH); //RMII TXD0
|
|
||||||
|
|
||||||
gpio.GPIO_Pin = GPIO_Pin_13;
|
|
||||||
GPIO_Init(GPIOB, &gpio);
|
|
||||||
GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_ETH); //RMII TXD1
|
|
||||||
|
|
||||||
NVIC_SetPriority(ETH_IRQn, 0);
|
|
||||||
NVIC_EnableIRQ(ETH_IRQn);
|
|
||||||
}
|
|
||||||
|
|
||||||
void serialzie() {
|
void serialzie() {
|
||||||
/* This is the buffer where we will store our message. */
|
/* This is the buffer where we will store our message. */
|
||||||
uint8_t buffer[128];
|
uint8_t buffer[128];
|
||||||
@ -103,13 +11,6 @@ void serialzie() {
|
|||||||
|
|
||||||
/* Encode our message */
|
/* Encode our message */
|
||||||
{
|
{
|
||||||
/* Allocate space on the stack to store the message data.
|
|
||||||
*
|
|
||||||
* Nanopb generates simple struct definitions for all the messages.
|
|
||||||
* - check out the contents of simple.pb.h!
|
|
||||||
* It is a good idea to always initialize your structures
|
|
||||||
* so that you do not have garbage data from RAM in there.
|
|
||||||
*/
|
|
||||||
SimpleMessage message = SimpleMessage_init_zero;
|
SimpleMessage message = SimpleMessage_init_zero;
|
||||||
|
|
||||||
/* Create a stream that will write to our buffer. */
|
/* Create a stream that will write to our buffer. */
|
||||||
@ -128,66 +29,23 @@ void serialzie() {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Now we could transmit the message over network, store it in a file or
|
|
||||||
* wrap it to a pigeon's leg.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* But because we are lazy, we will just decode it immediately. */
|
|
||||||
|
|
||||||
// {
|
|
||||||
// /* Allocate space for the decoded message. */
|
|
||||||
// SimpleMessage message = SimpleMessage_init_zero;
|
|
||||||
|
|
||||||
// /* Create a stream that reads from the buffer. */
|
|
||||||
// pb_istream_t stream = pb_istream_from_buffer(buffer, message_length);
|
|
||||||
|
|
||||||
// /* Now we are ready to decode the message. */
|
|
||||||
// status = pb_decode(&stream, SimpleMessage_fields, &message);
|
|
||||||
|
|
||||||
// /* Check for errors... */
|
|
||||||
// if (!status)
|
|
||||||
// {
|
|
||||||
// printf("Decoding failed: %s\n", PB_GET_ERROR(&stream));
|
|
||||||
// return 1;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// /* Print the data contained in the message. */
|
|
||||||
// // printf("Project: %s\n", message.project);
|
|
||||||
// // printf("Number: %d\n", message.number);
|
|
||||||
// }
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
|
boardInit();
|
||||||
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
|
|
||||||
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
|
|
||||||
SystemClock_Config();
|
|
||||||
uint32_t tick = SystemCoreClock/1000 - 1;
|
|
||||||
SysTick_Config(tick);
|
|
||||||
MX_GPIO_Init();
|
|
||||||
MX_USART2_UART_Init();
|
|
||||||
eth_init();
|
|
||||||
MX_LWIP_Init();
|
|
||||||
|
|
||||||
printf("Starting main loop..\r\n");
|
|
||||||
printf("SysClock: %d\r\n:", SystemCoreClock);
|
|
||||||
|
|
||||||
printf("FLASH->ACR: %d\r\n", FLASH->ACR);
|
|
||||||
printf("RCC->CFGR :%d\r\n", RCC->CFGR);
|
|
||||||
printf("RCC->CR :%d\r\n", RCC->CR);
|
|
||||||
printf("RCC->PLLCFGR :%d\r\n", RCC->PLLCFGR);
|
|
||||||
printf("RCC->APB1ENR :%d\r\n", RCC->APB1ENR);
|
|
||||||
udpServer_init();
|
udpServer_init();
|
||||||
// serialzie();
|
uint32_t cnt = 0;
|
||||||
|
char numStr[10];
|
||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
MX_LWIP_Process(); // poll for ethernet rx and timer operations.
|
lwipProcess(); // poll for ethernet rx and timer operations.
|
||||||
const char *data = "Hello, world!";
|
const char *data = "Hello, world!";
|
||||||
udp_send_data(data, strlen(data));
|
sprintf(numStr, "%d", cnt++);
|
||||||
|
char* strCat = strcat(data, numStr);
|
||||||
|
udp_send_data(numStr, strlen(numStr));
|
||||||
// serialzie();
|
// serialzie();
|
||||||
GPIO_ToggleBits(GPIOB, GPIO_Pin_14);
|
GPIO_ToggleBits(GPIOB, GPIO_Pin_14);
|
||||||
delay(500);
|
delay(500);
|
||||||
|
108
bsp/bsp.c
108
bsp/bsp.c
@ -1,7 +1,25 @@
|
|||||||
#include "misc.h"
|
#include "misc.h"
|
||||||
#include "bsp.h"
|
#include "bsp.h"
|
||||||
|
|
||||||
void gpio_init()
|
#define kHz_1 1000
|
||||||
|
|
||||||
|
static lwip_status_t lwip_status = {.link_status = LINK_DOWN};
|
||||||
|
|
||||||
|
lwip_status_t* getLwipStatus() {
|
||||||
|
return &lwip_status;
|
||||||
|
}
|
||||||
|
|
||||||
|
void sysInit() {
|
||||||
|
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
|
||||||
|
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
|
||||||
|
FLASH_PrefetchBufferCmd(ENABLE);
|
||||||
|
SystemCoreClock = 180000000;
|
||||||
|
uint32_t tick = SystemCoreClock/kHz_1 - 1;
|
||||||
|
SysTick_Config(tick);
|
||||||
|
NVIC_EnableIRQ(SysTick_IRQn);
|
||||||
|
}
|
||||||
|
|
||||||
|
void gpioInit()
|
||||||
{
|
{
|
||||||
RCC_AHB1PeriphClockCmd(
|
RCC_AHB1PeriphClockCmd(
|
||||||
RCC_AHB1Periph_GPIOA |
|
RCC_AHB1Periph_GPIOA |
|
||||||
@ -22,9 +40,9 @@ void gpio_init()
|
|||||||
GPIO_ResetBits(GPIOB, led_pins);
|
GPIO_ResetBits(GPIOB, led_pins);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void uartInit(void)
|
||||||
void usart_init()
|
|
||||||
{
|
{
|
||||||
|
|
||||||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||||
|
|
||||||
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
|
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
|
||||||
@ -53,20 +71,74 @@ void usart_init()
|
|||||||
USART_Cmd(USART2, ENABLE);
|
USART_Cmd(USART2, ENABLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void board_init() {
|
|
||||||
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
|
|
||||||
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
|
|
||||||
SystemInit();
|
|
||||||
SystemCoreClock = 180000000;
|
|
||||||
gpio_init();
|
|
||||||
usart_init();
|
|
||||||
printf("Starting main loop..\r\n");
|
|
||||||
printf("SysClock: %d\r\n:", SystemCoreClock);
|
|
||||||
|
|
||||||
printf("FLASH->ACR: %d\r\n", FLASH->ACR);
|
void tim_init() {
|
||||||
printf("RCC->CFGR :%d\r\n", RCC->CFGR);
|
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM7, ENABLE);
|
||||||
printf("RCC->CR :%d\r\n", RCC->CR);
|
TIM_TimeBaseInitTypeDef tim7;
|
||||||
printf("RCC->PLLCFGR :%d\r\n", RCC->PLLCFGR);
|
|
||||||
printf("RCC->APB1ENR :%d\r\n", RCC->APB1ENR);
|
TIM_TimeBaseStructInit(&tim7);
|
||||||
MX_LWIP_Init();
|
|
||||||
|
tim7.TIM_Prescaler = 9000-1;
|
||||||
|
tim7.TIM_CounterMode = TIM_CounterMode_Up;
|
||||||
|
tim7.TIM_Period = 2000;
|
||||||
|
tim7.TIM_ClockDivision = TIM_CKD_DIV1;
|
||||||
|
|
||||||
|
TIM_TimeBaseInit(TIM7, &tim7);
|
||||||
|
TIM_ClearITPendingBit(TIM7, TIM_IT_Update);
|
||||||
|
|
||||||
|
TIM_UpdateRequestConfig(TIM7, TIM_UpdateSource_Regular);
|
||||||
|
|
||||||
|
TIM_ITConfig(TIM7, TIM_IT_Update, ENABLE);
|
||||||
|
NVIC_SetPriority(TIM7_IRQn, 0);
|
||||||
|
NVIC_EnableIRQ(TIM7_IRQn);
|
||||||
|
|
||||||
|
TIM_Cmd(TIM7, ENABLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ethInit() {
|
||||||
|
|
||||||
|
RCC_AHB1PeriphClockCmd(RCC_AHB1ENR_ETHMACEN, ENABLE);
|
||||||
|
RCC_AHB1PeriphClockCmd(RCC_AHB1ENR_ETHMACRXEN, ENABLE);
|
||||||
|
RCC_AHB1PeriphClockCmd(RCC_AHB1ENR_ETHMACTXEN, ENABLE);
|
||||||
|
|
||||||
|
GPIO_InitTypeDef gpio;
|
||||||
|
|
||||||
|
gpio.GPIO_Mode = GPIO_Mode_AF;
|
||||||
|
gpio.GPIO_Speed = GPIO_Speed_100MHz;
|
||||||
|
gpio.GPIO_OType = GPIO_OType_PP;
|
||||||
|
gpio.GPIO_PuPd = GPIO_PuPd_NOPULL;
|
||||||
|
|
||||||
|
gpio.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_7;
|
||||||
|
GPIO_Init(GPIOA, &gpio);
|
||||||
|
GPIO_PinAFConfig(GPIOA, GPIO_PinSource1, GPIO_AF_ETH); //RMII ref clock
|
||||||
|
GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_ETH); //RMII MDIO
|
||||||
|
GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_ETH); //RMII RX Data Valid
|
||||||
|
|
||||||
|
gpio.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5;
|
||||||
|
GPIO_Init(GPIOC, &gpio);
|
||||||
|
GPIO_PinAFConfig(GPIOC, GPIO_PinSource1, GPIO_AF_ETH); //RMII MDC
|
||||||
|
GPIO_PinAFConfig(GPIOC, GPIO_PinSource4, GPIO_AF_ETH); //RMII RXD0
|
||||||
|
GPIO_PinAFConfig(GPIOC, GPIO_PinSource5, GPIO_AF_ETH); //RMII RXD1
|
||||||
|
|
||||||
|
gpio.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_13;
|
||||||
|
GPIO_Init(GPIOG, &gpio);
|
||||||
|
GPIO_PinAFConfig(GPIOG, GPIO_PinSource11, GPIO_AF_ETH); //RMII TX enable
|
||||||
|
GPIO_PinAFConfig(GPIOG, GPIO_PinSource13, GPIO_AF_ETH); //RMII TXD0
|
||||||
|
|
||||||
|
gpio.GPIO_Pin = GPIO_Pin_13;
|
||||||
|
GPIO_Init(GPIOB, &gpio);
|
||||||
|
GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_ETH); //RMII TXD1
|
||||||
|
|
||||||
|
NVIC_SetPriority(ETH_IRQn, 0);
|
||||||
|
NVIC_EnableIRQ(ETH_IRQn);
|
||||||
|
}
|
||||||
|
|
||||||
|
void boardInit() {
|
||||||
|
sysInit();
|
||||||
|
gpioInit();
|
||||||
|
uartInit();
|
||||||
|
ethInit();
|
||||||
|
tim_init();
|
||||||
|
printf("Starting main loop..\r\n");
|
||||||
|
lwipInit();
|
||||||
}
|
}
|
12
bsp/bsp.h
12
bsp/bsp.h
@ -10,6 +10,16 @@
|
|||||||
#include "stm32f4xx_flash.h"
|
#include "stm32f4xx_flash.h"
|
||||||
#include "lwip/lwip.h"
|
#include "lwip/lwip.h"
|
||||||
|
|
||||||
void board_init();
|
typedef enum {
|
||||||
|
LINK_DOWN,
|
||||||
|
LINK_UP
|
||||||
|
} status_t;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
uint8_t link_status;
|
||||||
|
} lwip_status_t;
|
||||||
|
|
||||||
|
void boardInit();
|
||||||
|
lwip_status_t* getLwipStatus();
|
||||||
|
|
||||||
#endif
|
#endif
|
@ -57,22 +57,12 @@
|
|||||||
#include "lwip/ethip6.h"
|
#include "lwip/ethip6.h"
|
||||||
#include "ethernetif.h"
|
#include "ethernetif.h"
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
/* Within 'USER CODE' section, code will be kept by default at each generation */
|
|
||||||
/* USER CODE BEGIN 0 */
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
/* USER CODE END 0 */
|
|
||||||
|
|
||||||
/* Private define ------------------------------------------------------------*/
|
|
||||||
|
|
||||||
/* Network interface name */
|
/* Network interface name */
|
||||||
#define IFNAME0 's'
|
#define IFNAME0 's'
|
||||||
#define IFNAME1 't'
|
#define IFNAME1 't'
|
||||||
|
|
||||||
/* USER CODE BEGIN 1 */
|
|
||||||
|
|
||||||
/* USER CODE END 1 */
|
|
||||||
|
|
||||||
/* Private variables ---------------------------------------------------------*/
|
/* Private variables ---------------------------------------------------------*/
|
||||||
#if defined ( __ICCARM__ ) /*!< IAR Compiler */
|
#if defined ( __ICCARM__ ) /*!< IAR Compiler */
|
||||||
#pragma data_alignment=4
|
#pragma data_alignment=4
|
||||||
@ -94,10 +84,6 @@ __ALIGN_BEGIN uint8_t Rx_Buff[ETH_RXBUFNB][ETH_RX_BUF_SIZE] __ALIGN_END; /* Ethe
|
|||||||
#endif
|
#endif
|
||||||
__ALIGN_BEGIN uint8_t Tx_Buff[ETH_TXBUFNB][ETH_TX_BUF_SIZE] __ALIGN_END; /* Ethernet Transmit Buffer */
|
__ALIGN_BEGIN uint8_t Tx_Buff[ETH_TXBUFNB][ETH_TX_BUF_SIZE] __ALIGN_END; /* Ethernet Transmit Buffer */
|
||||||
|
|
||||||
/* USER CODE BEGIN 2 */
|
|
||||||
|
|
||||||
/* USER CODE END 2 */
|
|
||||||
|
|
||||||
/* Global Ethernet handle */
|
/* Global Ethernet handle */
|
||||||
ETH_HandleTypeDef heth;
|
ETH_HandleTypeDef heth;
|
||||||
|
|
||||||
@ -105,21 +91,6 @@ ETH_HandleTypeDef* getEthStruct() {
|
|||||||
return &heth;
|
return &heth;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* USER CODE BEGIN 3 */
|
|
||||||
|
|
||||||
/* USER CODE END 3 */
|
|
||||||
|
|
||||||
/* Private functions ---------------------------------------------------------*/
|
|
||||||
|
|
||||||
// void HAL_ETH_MspInit(ETH_HandleTypeDef* ethHandle)
|
|
||||||
// {
|
|
||||||
|
|
||||||
// }
|
|
||||||
|
|
||||||
/* USER CODE BEGIN 4 */
|
|
||||||
|
|
||||||
/* USER CODE END 4 */
|
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
LL Driver Interface ( LwIP stack --> ETH)
|
LL Driver Interface ( LwIP stack --> ETH)
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
@ -135,8 +106,6 @@ static void low_level_init(struct netif *netif)
|
|||||||
uint32_t regvalue = 0;
|
uint32_t regvalue = 0;
|
||||||
HAL_StatusTypeDef hal_eth_init_status;
|
HAL_StatusTypeDef hal_eth_init_status;
|
||||||
|
|
||||||
/* Init ETH */
|
|
||||||
|
|
||||||
uint8_t MACAddr[6] ;
|
uint8_t MACAddr[6] ;
|
||||||
heth.Instance = ETH;
|
heth.Instance = ETH;
|
||||||
heth.Init.AutoNegotiation = ETH_AUTONEGOTIATION_ENABLE;
|
heth.Init.AutoNegotiation = ETH_AUTONEGOTIATION_ENABLE;
|
||||||
@ -152,13 +121,11 @@ static void low_level_init(struct netif *netif)
|
|||||||
heth.Init.ChecksumMode = ETH_CHECKSUM_BY_HARDWARE;
|
heth.Init.ChecksumMode = ETH_CHECKSUM_BY_HARDWARE;
|
||||||
heth.Init.MediaInterface = ETH_MEDIA_INTERFACE_RMII;
|
heth.Init.MediaInterface = ETH_MEDIA_INTERFACE_RMII;
|
||||||
|
|
||||||
/* USER CODE BEGIN MACADDRESS */
|
|
||||||
printf("LAN8742A PHYAD: 0x0\r\r\n");
|
printf("LAN8742A PHYAD: 0x0\r\r\n");
|
||||||
printf("Setting MACaddr: %02x:%02x:%02x:%02x:%02x:%02x\r\r\n",
|
printf("Setting MACaddr: %02x:%02x:%02x:%02x:%02x:%02x\r\r\n",
|
||||||
MACAddr[0], MACAddr[1], MACAddr[2],
|
MACAddr[0], MACAddr[1], MACAddr[2],
|
||||||
MACAddr[3], MACAddr[4], MACAddr[5]);
|
MACAddr[3], MACAddr[4], MACAddr[5]);
|
||||||
printf("LAN8742A interface is RMII\r\r\n");
|
printf("LAN8742A interface is RMII\r\r\n");
|
||||||
/* USER CODE END MACADDRESS */
|
|
||||||
|
|
||||||
hal_eth_init_status = HAL_ETH_Init(&heth);
|
hal_eth_init_status = HAL_ETH_Init(&heth);
|
||||||
|
|
||||||
@ -200,10 +167,7 @@ static void low_level_init(struct netif *netif)
|
|||||||
/* Enable MAC and DMA transmission and reception */
|
/* Enable MAC and DMA transmission and reception */
|
||||||
HAL_ETH_Start(&heth);
|
HAL_ETH_Start(&heth);
|
||||||
|
|
||||||
/* USER CODE BEGIN PHY_PRE_CONFIG */
|
printf("Starting Ethernet IRQ/DMA..\r\r\n");
|
||||||
printf("Starting Ethernet IRQ/DMA..\r\r\n");
|
|
||||||
/* USER CODE END PHY_PRE_CONFIG */
|
|
||||||
|
|
||||||
|
|
||||||
/* Read Register Configuration */
|
/* Read Register Configuration */
|
||||||
HAL_ETH_ReadPHYRegister(&heth, PHY_ISFR, ®value);
|
HAL_ETH_ReadPHYRegister(&heth, PHY_ISFR, ®value);
|
||||||
@ -214,14 +178,9 @@ static void low_level_init(struct netif *netif)
|
|||||||
|
|
||||||
/* Read Register Configuration */
|
/* Read Register Configuration */
|
||||||
HAL_ETH_ReadPHYRegister(&heth, PHY_ISFR , ®value);
|
HAL_ETH_ReadPHYRegister(&heth, PHY_ISFR , ®value);
|
||||||
/* USER CODE BEGIN PHY_POST_CONFIG */
|
|
||||||
/* USER CODE END PHY_POST_CONFIG */
|
|
||||||
|
|
||||||
#endif /* LWIP_ARP || LWIP_ETHERNET */
|
#endif /* LWIP_ARP || LWIP_ETHERNET */
|
||||||
|
|
||||||
/* USER CODE BEGIN LOW_LEVEL_INIT */
|
|
||||||
|
|
||||||
/* USER CODE END LOW_LEVEL_INIT */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -336,7 +295,6 @@ static struct pbuf * low_level_input(struct netif *netif)
|
|||||||
uint32_t byteslefttocopy = 0;
|
uint32_t byteslefttocopy = 0;
|
||||||
uint32_t i=0;
|
uint32_t i=0;
|
||||||
|
|
||||||
|
|
||||||
/* get received frame */
|
/* get received frame */
|
||||||
if (HAL_ETH_GetReceivedFrame(&heth) != HAL_OK)
|
if (HAL_ETH_GetReceivedFrame(&heth) != HAL_OK)
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -404,29 +362,31 @@ static struct pbuf * low_level_input(struct netif *netif)
|
|||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
void check_link_status(struct netif *netif) {
|
void check_link_status(struct netif* netif) {
|
||||||
uint32_t regvalue = 0;
|
uint32_t regvalue = 0;
|
||||||
if (HAL_ETH_ReadPHYRegister(&heth, PHY_BSR, ®value) == HAL_OK)
|
if (HAL_ETH_ReadPHYRegister(&heth, PHY_BSR, ®value) == HAL_OK)
|
||||||
{
|
{
|
||||||
if((regvalue & PHY_LINKED_STATUS)== (uint16_t)RESET)
|
if((regvalue & PHY_LINKED_STATUS)== (uint16_t)RESET)
|
||||||
{
|
{
|
||||||
if (netif_is_link_up(netif))
|
// Link status = disconnected
|
||||||
{
|
if (netif_is_link_up(netif))
|
||||||
// netif_set_down(netif);
|
{
|
||||||
printf("unplugged\r\n");
|
netif_set_down(netif);
|
||||||
// netif_set_link_down(netif);
|
getLwipStatus()->link_status = LINK_DOWN;
|
||||||
}
|
netif_set_link_down(netif);
|
||||||
} else {
|
}
|
||||||
// Link status = connected
|
}
|
||||||
if (!netif_is_link_up(netif))
|
else {
|
||||||
{
|
// Link status = connected
|
||||||
printf("plugged\r\n");
|
if (!netif_is_link_up(netif))
|
||||||
// NVIC_SystemReset();
|
{
|
||||||
}
|
getLwipStatus()->link_status = LINK_UP;
|
||||||
}
|
NVIC_SystemReset();
|
||||||
|
}
|
||||||
|
getLwipStatus()->link_status = LINK_UP;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This function should be called when a packet is ready to be read
|
* This function should be called when a packet is ready to be read
|
||||||
* from the interface. It uses the function low_level_input() that
|
* from the interface. It uses the function low_level_input() that
|
||||||
@ -440,7 +400,7 @@ void ethernetif_input(struct netif *netif)
|
|||||||
{
|
{
|
||||||
err_t err;
|
err_t err;
|
||||||
struct pbuf *p;
|
struct pbuf *p;
|
||||||
// HAL_GPIO_TogglePin(GPIOB, 7);
|
|
||||||
/* move received packet into a new pbuf */
|
/* move received packet into a new pbuf */
|
||||||
p = low_level_input(netif);
|
p = low_level_input(netif);
|
||||||
check_link_status(netif);
|
check_link_status(netif);
|
||||||
@ -470,10 +430,6 @@ static err_t low_level_output_arp_off(struct netif *netif, struct pbuf *q, const
|
|||||||
err_t errval;
|
err_t errval;
|
||||||
errval = ERR_OK;
|
errval = ERR_OK;
|
||||||
|
|
||||||
/* USER CODE BEGIN 5 */
|
|
||||||
|
|
||||||
/* USER CODE END 5 */
|
|
||||||
|
|
||||||
return errval;
|
return errval;
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -530,8 +486,6 @@ err_t ethernetif_init(struct netif *netif)
|
|||||||
return ERR_OK;
|
return ERR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* USER CODE BEGIN 6 */
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Returns the current time in milliseconds
|
* @brief Returns the current time in milliseconds
|
||||||
* when LWIP_TIMERS == 1 and NO_SYS == 1
|
* when LWIP_TIMERS == 1 and NO_SYS == 1
|
||||||
@ -554,12 +508,6 @@ u32_t sys_now(void)
|
|||||||
return getSysTick();
|
return getSysTick();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* USER CODE END 6 */
|
|
||||||
|
|
||||||
/* USER CODE BEGIN 7 */
|
|
||||||
|
|
||||||
/* USER CODE END 7 */
|
|
||||||
|
|
||||||
#if LWIP_NETIF_LINK_CALLBACK
|
#if LWIP_NETIF_LINK_CALLBACK
|
||||||
/**
|
/**
|
||||||
* @brief Link callback function, this function is called on change of link status
|
* @brief Link callback function, this function is called on change of link status
|
||||||
@ -649,7 +597,6 @@ void ethernetif_update_config(struct netif *netif)
|
|||||||
ethernetif_notify_conn_changed(netif);
|
ethernetif_notify_conn_changed(netif);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* USER CODE BEGIN 8 */
|
|
||||||
/**
|
/**
|
||||||
* @brief This function notify user about link status changement.
|
* @brief This function notify user about link status changement.
|
||||||
* @param netif: the network interface
|
* @param netif: the network interface
|
||||||
@ -662,11 +609,8 @@ __weak void ethernetif_notify_conn_changed(struct netif *netif)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
}
|
}
|
||||||
/* USER CODE END 8 */
|
|
||||||
#endif /* LWIP_NETIF_LINK_CALLBACK */
|
#endif /* LWIP_NETIF_LINK_CALLBACK */
|
||||||
|
|
||||||
/* USER CODE BEGIN 9 */
|
|
||||||
|
|
||||||
/* USER CODE END 9 */
|
|
||||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
#include "lwip/err.h"
|
#include "lwip/err.h"
|
||||||
#include "lwip/netif.h"
|
#include "lwip/netif.h"
|
||||||
#include "stm32f4xx_hal_eth.h"
|
#include "stm32f4xx_hal_eth.h"
|
||||||
#include "bsp.h"
|
#include "../bsp/bsp.h"
|
||||||
|
|
||||||
err_t ethernetif_init(struct netif *netif);
|
err_t ethernetif_init(struct netif *netif);
|
||||||
|
|
||||||
|
132
bsp/lwip/lwip.c
132
bsp/lwip/lwip.c
@ -10,18 +10,10 @@
|
|||||||
|
|
||||||
void Error_Handler(void);
|
void Error_Handler(void);
|
||||||
|
|
||||||
/* DHCP Variables initialization ---------------------------------------------*/
|
|
||||||
uint32_t DHCPfineTimer = 0;
|
|
||||||
uint32_t DHCPcoarseTimer = 0;
|
|
||||||
/* USER CODE BEGIN 1 */
|
|
||||||
|
|
||||||
struct udp_pcb *upcb;
|
struct udp_pcb *upcb;
|
||||||
ip_addr_t remote_ip;
|
ip_addr_t remote_ip;
|
||||||
u16_t remote_port;
|
u16_t remote_port;
|
||||||
|
|
||||||
/* USER CODE END 1 */
|
|
||||||
|
|
||||||
/* Variables Initialization */
|
|
||||||
struct netif gnetif;
|
struct netif gnetif;
|
||||||
ip4_addr_t ipaddr;
|
ip4_addr_t ipaddr;
|
||||||
ip4_addr_t netmask;
|
ip4_addr_t netmask;
|
||||||
@ -29,7 +21,6 @@ ip4_addr_t gw;
|
|||||||
uint8_t IP_ADDRESS[4];
|
uint8_t IP_ADDRESS[4];
|
||||||
uint8_t NETMASK_ADDRESS[4];
|
uint8_t NETMASK_ADDRESS[4];
|
||||||
uint8_t GATEWAY_ADDRESS[4];
|
uint8_t GATEWAY_ADDRESS[4];
|
||||||
/* USER CODE BEGIN 2 */
|
|
||||||
|
|
||||||
void udpServer_init(void)
|
void udpServer_init(void)
|
||||||
{
|
{
|
||||||
@ -44,15 +35,14 @@ void udpServer_init(void)
|
|||||||
/* 2. Bind the upcb to the local port */
|
/* 2. Bind the upcb to the local port */
|
||||||
IP_ADDR4(&local_ip, 192, 168, 1, 66);
|
IP_ADDR4(&local_ip, 192, 168, 1, 66);
|
||||||
|
|
||||||
err = udp_bind(upcb, &local_ip, local_port); // 7 is the server UDP port
|
err = udp_bind(upcb, &local_ip, local_port);
|
||||||
|
|
||||||
|
|
||||||
/* 3. Set a receive callback for the upcb */
|
/* 3. Set a receive callback for the upcb */
|
||||||
if(err == ERR_OK)
|
if(err == ERR_OK)
|
||||||
{
|
{
|
||||||
IP4_ADDR(&remote_ip, 192, 168, 1, 111);
|
IP4_ADDR(&remote_ip, 192, 168, 1, 111);
|
||||||
remote_port = 5678;
|
remote_port = 5678;
|
||||||
// udp_recv(udp_pcb, udp_receive_callback, NULL);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -73,16 +63,12 @@ void udp_send_data(const char *data, u16_t len)
|
|||||||
pbuf_free(p);
|
pbuf_free(p);
|
||||||
if (err != ERR_OK)
|
if (err != ERR_OK)
|
||||||
{
|
{
|
||||||
// handle error
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* USER CODE END 2 */
|
|
||||||
|
|
||||||
/**
|
void lwipInit(void)
|
||||||
* LwIP initialization function
|
|
||||||
*/
|
|
||||||
void MX_LWIP_Init(void)
|
|
||||||
{
|
{
|
||||||
IP_ADDRESS[0] = 192;
|
IP_ADDRESS[0] = 192;
|
||||||
IP_ADDRESS[1] = 168;
|
IP_ADDRESS[1] = 168;
|
||||||
@ -100,22 +86,12 @@ void MX_LWIP_Init(void)
|
|||||||
/* Initilialize the LwIP stack without RTOS */
|
/* Initilialize the LwIP stack without RTOS */
|
||||||
lwip_init();
|
lwip_init();
|
||||||
|
|
||||||
/* IP addresses initialization with DHCP (IPv4) */
|
|
||||||
// ipaddr.addr = 0;
|
|
||||||
// netmask.addr = 0;
|
|
||||||
// gw.addr = 0;
|
|
||||||
|
|
||||||
IP4_ADDR(&ipaddr, IP_ADDRESS[0], IP_ADDRESS[1], IP_ADDRESS[2], IP_ADDRESS[3]);
|
IP4_ADDR(&ipaddr, IP_ADDRESS[0], IP_ADDRESS[1], IP_ADDRESS[2], IP_ADDRESS[3]);
|
||||||
IP4_ADDR(&netmask, NETMASK_ADDRESS[0], NETMASK_ADDRESS[1] , NETMASK_ADDRESS[2], NETMASK_ADDRESS[3]);
|
IP4_ADDR(&netmask, NETMASK_ADDRESS[0], NETMASK_ADDRESS[1] , NETMASK_ADDRESS[2], NETMASK_ADDRESS[3]);
|
||||||
IP4_ADDR(&gw, GATEWAY_ADDRESS[0], GATEWAY_ADDRESS[1], GATEWAY_ADDRESS[2], GATEWAY_ADDRESS[3]);
|
IP4_ADDR(&gw, GATEWAY_ADDRESS[0], GATEWAY_ADDRESS[1], GATEWAY_ADDRESS[2], GATEWAY_ADDRESS[3]);
|
||||||
|
|
||||||
// netif_set_ipaddr(&gnetif, &ipaddr);
|
|
||||||
// netif_set_netmask(&gnetif, &netmask);
|
|
||||||
// netif_set_gw(&gnetif, &gw);
|
|
||||||
|
|
||||||
/* add the network interface (IPv4/IPv6) without RTOS */
|
/* add the network interface (IPv4/IPv6) without RTOS */
|
||||||
netif_add(&gnetif, &ipaddr, &netmask, &gw, NULL, ðernetif_init, ðernet_input);
|
netif_add(&gnetif, &ipaddr, &netmask, &gw, NULL, ðernetif_init, ðernet_input);
|
||||||
// netif_add(&gnetif, &ipaddr, &netmask, &gw, NULL, ðernetif_init, ðernetif_input);
|
|
||||||
|
|
||||||
/* Registers the default network interface */
|
/* Registers the default network interface */
|
||||||
netif_set_default(&gnetif);
|
netif_set_default(&gnetif);
|
||||||
@ -130,22 +106,8 @@ void MX_LWIP_Init(void)
|
|||||||
/* When the netif link is down this function must be called */
|
/* When the netif link is down this function must be called */
|
||||||
netif_set_down(&gnetif);
|
netif_set_down(&gnetif);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Start DHCP negotiation for a network interface (IPv4) */
|
|
||||||
// dhcp_start(&gnetif);
|
|
||||||
|
|
||||||
/* USER CODE BEGIN 3 */
|
|
||||||
|
|
||||||
/* USER CODE END 3 */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef USE_OBSOLETE_USER_CODE_SECTION_4
|
|
||||||
/* Kept to help code migration. (See new 4_1, 4_2... sections) */
|
|
||||||
/* Avoid to use this user section which will become obsolete. */
|
|
||||||
/* USER CODE BEGIN 4 */
|
|
||||||
/* USER CODE END 4 */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ----------------------------------------------------------------------
|
* ----------------------------------------------------------------------
|
||||||
* Function given to help user to continue LwIP Initialization
|
* Function given to help user to continue LwIP Initialization
|
||||||
@ -157,93 +119,9 @@ void MX_LWIP_Init(void)
|
|||||||
* Handle timeouts if LWIP_TIMERS is set and without RTOS
|
* Handle timeouts if LWIP_TIMERS is set and without RTOS
|
||||||
* Handle the llink status if LWIP_NETIF_LINK_CALLBACK is set and without RTOS
|
* Handle the llink status if LWIP_NETIF_LINK_CALLBACK is set and without RTOS
|
||||||
*/
|
*/
|
||||||
void MX_LWIP_Process(void)
|
void lwipProcess(void)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN 4_1 */
|
|
||||||
/* USER CODE END 4_1 */
|
|
||||||
ethernetif_input(&gnetif);
|
ethernetif_input(&gnetif);
|
||||||
|
|
||||||
/* USER CODE BEGIN 4_2 */
|
|
||||||
/* USER CODE END 4_2 */
|
|
||||||
/* Handle timeouts */
|
|
||||||
sys_check_timeouts();
|
sys_check_timeouts();
|
||||||
|
|
||||||
/* USER CODE BEGIN 4_3 */
|
|
||||||
|
|
||||||
/* USER CODE END 4_3 */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined ( __CC_ARM ) /* MDK ARM Compiler */
|
|
||||||
/**
|
|
||||||
* Opens a serial device for communication.
|
|
||||||
*
|
|
||||||
* @param devnum device number
|
|
||||||
* @return handle to serial device if successful, NULL otherwise
|
|
||||||
*/
|
|
||||||
sio_fd_t sio_open(u8_t devnum)
|
|
||||||
{
|
|
||||||
sio_fd_t sd;
|
|
||||||
|
|
||||||
/* USER CODE BEGIN 7 */
|
|
||||||
sd = 0; // dummy code
|
|
||||||
/* USER CODE END 7 */
|
|
||||||
|
|
||||||
return sd;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sends a single character to the serial device.
|
|
||||||
*
|
|
||||||
* @param c character to send
|
|
||||||
* @param fd serial device handle
|
|
||||||
*
|
|
||||||
* @note This function will block until the character can be sent.
|
|
||||||
*/
|
|
||||||
void sio_send(u8_t c, sio_fd_t fd)
|
|
||||||
{
|
|
||||||
/* USER CODE BEGIN 8 */
|
|
||||||
/* USER CODE END 8 */
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Reads from the serial device.
|
|
||||||
*
|
|
||||||
* @param fd serial device handle
|
|
||||||
* @param data pointer to data buffer for receiving
|
|
||||||
* @param len maximum length (in bytes) of data to receive
|
|
||||||
* @return number of bytes actually received - may be 0 if aborted by sio_read_abort
|
|
||||||
*
|
|
||||||
* @note This function will block until data can be received. The blocking
|
|
||||||
* can be cancelled by calling sio_read_abort().
|
|
||||||
*/
|
|
||||||
u32_t sio_read(sio_fd_t fd, u8_t *data, u32_t len)
|
|
||||||
{
|
|
||||||
u32_t recved_bytes;
|
|
||||||
|
|
||||||
/* USER CODE BEGIN 9 */
|
|
||||||
recved_bytes = 0; // dummy code
|
|
||||||
/* USER CODE END 9 */
|
|
||||||
return recved_bytes;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tries to read from the serial device. Same as sio_read but returns
|
|
||||||
* immediately if no data is available and never blocks.
|
|
||||||
*
|
|
||||||
* @param fd serial device handle
|
|
||||||
* @param data pointer to data buffer for receiving
|
|
||||||
* @param len maximum length (in bytes) of data to receive
|
|
||||||
* @return number of bytes actually received
|
|
||||||
*/
|
|
||||||
u32_t sio_tryread(sio_fd_t fd, u8_t *data, u32_t len)
|
|
||||||
{
|
|
||||||
u32_t recved_bytes;
|
|
||||||
|
|
||||||
/* USER CODE BEGIN 10 */
|
|
||||||
recved_bytes = 0; // dummy code
|
|
||||||
/* USER CODE END 10 */
|
|
||||||
return recved_bytes;
|
|
||||||
}
|
|
||||||
#endif /* MDK ARM Compiler */
|
|
||||||
|
|
||||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
void udpServer_init(void);
|
void udpServer_init(void);
|
||||||
void udp_send_data(const char *data, u16_t len);
|
void udp_send_data(const char *data, u16_t len);
|
||||||
void MX_LWIP_Init(void);
|
void lwipInit(void);
|
||||||
void MX_LWIP_Process(void);
|
void lwipProcess(void);
|
||||||
|
|
||||||
#endif /*__ mx_lwip_H */
|
#endif
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
#include "stm32f4xx_it.h"
|
#include "stm32f4xx_it.h"
|
||||||
#include "lwip/ethernetif.h"
|
#include "lwip/ethernetif.h"
|
||||||
|
|
||||||
// extern ETH_HandleTypeDef heth;
|
|
||||||
|
|
||||||
static volatile uint32_t sys_tick = 0;
|
static volatile uint32_t sys_tick = 0;
|
||||||
|
|
||||||
void SysTick_Handler(void)
|
void SysTick_Handler(void)
|
||||||
@ -25,6 +23,18 @@ void delay(uint32_t delay) {
|
|||||||
while((getSysTick() - tickStart) < wait) {}
|
while((getSysTick() - tickStart) < wait) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TIM7_IRQHandler()
|
||||||
|
{
|
||||||
|
TIM_ClearITPendingBit(TIM7, TIM_IT_Update);
|
||||||
|
|
||||||
|
if(getLwipStatus()->link_status == LINK_UP) {
|
||||||
|
GPIO_ToggleBits(GPIOB, GPIO_Pin_7);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
GPIO_ResetBits(GPIOB, GPIO_Pin_7);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void USART2_IRQHandler(void)
|
void USART2_IRQHandler(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -1,21 +1,10 @@
|
|||||||
#ifndef __STM32F4xx_IT_H
|
#ifndef __STM32F4xx_IT_H
|
||||||
#define __STM32F4xx_IT_H
|
#define __STM32F4xx_IT_H
|
||||||
#include "stdint.h"
|
#include "stdint.h"
|
||||||
|
#include "bsp.h"
|
||||||
|
|
||||||
void NMI_Handler(void);
|
|
||||||
void HardFault_Handler(void);
|
|
||||||
void MemManage_Handler(void);
|
|
||||||
void BusFault_Handler(void);
|
|
||||||
void UsageFault_Handler(void);
|
|
||||||
void SVC_Handler(void);
|
|
||||||
void DebugMon_Handler(void);
|
|
||||||
void PendSV_Handler(void);
|
|
||||||
void SysTick_Handler(void);
|
|
||||||
void USART2_IRQHandler(void);
|
|
||||||
void ETH_IRQHandler(void);
|
|
||||||
uint32_t getSysTick();
|
uint32_t getSysTick();
|
||||||
void delay(uint32_t);
|
void delay(uint32_t);
|
||||||
|
|
||||||
|
#endif
|
||||||
#endif /* __STM32F4xx_IT_H */
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user