银杏科技有限公司旗下技术文档发布平台 | |||
技术支持电话 | 0379-69926675-801 | ||
技术支持邮件 | Gingko@vip.163.com | ||
版本 | 日期 | 作者 | 修改内容 |
---|---|---|---|
V1.0 | 2020-09-16 | gingko | 初次建立 |
1. 新建工程:在主界面选择File–>New Project 或者直接点击ACCEE TO MCU SELECTOR 2. 出现芯片型号选择,搜索自己芯片的型号,双击型号,或者点击Start Project进入配置 在搜索栏的下面,提供的各种查找方式,可以选择芯片内核、型号等等,可以帮助你查找芯片。本实验选取的芯片型号为:STM32F407IGTx。 3. 配置RCC,使用外部时钟源 4. 配置调试引脚 5. 将LED对应的3个引脚(PI5,PI6,PI7)设置为GPIO_Output 6. 引脚模式配置 7. 选中SPI1,Mode选择Full_Duplex Master,配置PB3(SPI1_SCK)、PB4(SPI1_MISO)、PA7(SPI1_MOSI)和PA15(CS)为SPI引脚。 配置PA15(CS)的GPIO输出模式 8. 时钟源设置,选择外部高速时钟源,配置为最大主频
9. 工程文件的设置, 这里就是工程的各种配置 我们只用到有限几个,其他的默认即可 IDE我们使用的是 MDK5 10. 点击Code Generator,进行进一步配置
自行选择方式即可
11. 然后点击GENERATE CODE 创建工程 创建成功,打开工程。
while (1) { switch(getSn_SR(0)) /*获取socket0的状态*/ { case SOCK_UDP: if(getSn_IR(0) & Sn_IR_RECV) { setSn_IR(0, Sn_IR_RECV); } if((receive_length = getSn_RX_RSR(0))>0) /*receive_length为已接收数据长度*/ { length = recvfrom(0, receive_buffer, receive_length, pc_ip,&pc_port); /*接收数据*/ sendto(0, receive_buffer,length, pc_ip, pc_port); /*发送接收到的数据*/ } break; case SOCK_CLOSED: /*socket关闭*/ socket(0,Sn_MR_UDP,30000,0); /*打开socket0的一个端口*/ break; } }
void MX_SPI1_Init(void) { hspi1.Instance = SPI1; hspi1.Init.Mode = SPI_MODE_MASTER; //SPI主模式 hspi1.Init.Direction = SPI_DIRECTION_2LINES; //全双工模式 hspi1.Init.DataSize = SPI_DATASIZE_8BIT; //数据位为8位 hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; //CPOL = 0 hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; //CPHA为数据线的第一个变化沿 hspi1.Init.NSS = SPI_NSS_SOFT; //软件控制NSS hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;//2分频 hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; //最高位先发送 hspi1.Init.TIMode = SPI_TIMODE_DISABLE; //TIMODE模式关闭 hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;//CRC关闭 hspi1.Init.CRCPolynomial = 10;//默认值,无效 if (HAL_SPI_Init(&hspi1) != HAL_OK)//初始化 { Error_Handler(); } }
static unsigned char send_data(unsigned char data)//SPI读写字节函数 { unsigned char receive_data; HAL_SPI_TransmitReceive(&hspi1,&data,&receive_data,1,1000);//接收发送函数 return receive_data;//返回接收到的值 } static int write(int number, unsigned char * buf) //SPI读写多字节函数 { int i; SPI1_CS_OFF; //拉低CS引脚 for (i = 0; i < number; i++){ buf[i] = send_data(buf[i]); //调用send_data()函数 } SPI1_CS_ON; //拉高CS引脚 return 0; }
//定义本设备IP地址、默认网关、MAC地址、子网掩码 W5500_T w5500={ .initialize=initialize, .mac = {0x00,0x98,0xdc,0x42,0x61,0x11}, .ip = {192,168,0,10}, .sub = {255,255,255,0}, .gw = {192,168,0,1} }; //W5500写函数 void IINCHIP_WRITE (unsigned long int addrbsb, unsigned char data) { SPI1_CS_OFF; spi1.send_data( (addrbsb & 0x00FF0000)>>16); // Address byte 1 spi1.send_data( (addrbsb & 0x0000FF00)>> 8); // Address byte 2 spi1.send_data( (addrbsb & 0x000000F8) + 4); // Data write command and Write data length 1 spi1.send_data(data); // Data write (write 1byte data) SPI1_CS_ON } //W5500读函数 unsigned char IINCHIP_READ (unsigned long int addrbsb) // Address byte 1 { unsigned char data = 0; SPI1_CS_OFF; spi1.send_data( (addrbsb & 0x00FF0000)>>16); // Address byte 1 spi1.send_data( (addrbsb & 0x0000FF00)>> 8); // Address byte 2 spi1.send_data( (addrbsb & 0x000000F8)) ; // Data read command and Read data length 1 data = spi1.send_data(0x00); // Data read (read 1byte data) SPI1_CS_ON; return data; }