收藏 分享(赏)

基于STM32F103嵌入式实验指导书.doc

上传人:tangtianxu1 文档编号:2985760 上传时间:2018-10-01 格式:DOC 页数:28 大小:368KB
下载 相关 举报
基于STM32F103嵌入式实验指导书.doc_第1页
第1页 / 共28页
基于STM32F103嵌入式实验指导书.doc_第2页
第2页 / 共28页
基于STM32F103嵌入式实验指导书.doc_第3页
第3页 / 共28页
基于STM32F103嵌入式实验指导书.doc_第4页
第4页 / 共28页
基于STM32F103嵌入式实验指导书.doc_第5页
第5页 / 共28页
点击查看更多>>
资源描述

1、实验一、STM32 的开发环境与简单工程一、实验目的1、熟悉 STM32 开发板的开发环境;2、熟悉 MDK 创建和配置 STM32 工程项目的基本流程;3、熟悉 STM32 官方库的应用;4、规范编程格式。二、实验内容本次实验配置 MDK 集成开发环境,新建一个简单的工程文件,添加 STM32 官方库并配置工程,编译运行这个工程文件。下载已经编译好的文件到开发板中运行。学会在程序中设置断点,观察系统内存和变量,为调试应用程序打下基础。三、预备知识基本单片机硬件知识、单片机软件编程语言、程序创建和调试的基本方法。四、实验设备及工具硬件:STM32 开发平台软件:STM32 官方库;PC 机操作

2、系统 Windows 98、Windows 2000 或 Windows XP;KEIL MDK 集成开发环境;串口转 usb 驱动。五、实验步骤1、在准备存放工程文件的目录下创建一新文件夹,命名为 Proj_GPIO;在 Proj_GPIO文件夹里面分别再创建四个文件夹:CMSIS、USER、LIB 、OBJ。如图 1。其中 CMSIS(Cortex Microcontroller Software Interface Standard)用于存放 Cortex-M 处理器系列的与供应商无关的软件抽象层和启动相关的代码文件;USER 用于存放我们自己编写的代码文件(含自己移植的底层驱动) ,还

3、有 MDK 工程;LIB 存放所有的官方底层驱动库文件;OBJ 用于工程输出的过程文件和最终的二进制文件。图 12、将官方库 STM32F10x_StdPeriph_Lib_V3.5.0.rar 解压。1)把 STM32F10x_StdPeriph_Lib_V3.5.0LibrariesCMSISCM3CoreSupport 下的所有文件和STM32F10x_StdPeriph_Lib_V3.5.0LibrariesCMSISCM3DeviceSupportSTSTM32F10x 下的所有文件都到第一步所创建的 CMSIS 文件夹中;2)把 STM32F10x_StdPeriph_Lib_V3

4、.5.0LibrariesSTM32F10x_StdPeriph_Driver 目录下的文件(目录 inc 和 scr)复制到第一步创建的 LIB 文件夹中;3)把STM32F10x_StdPeriph_Lib_V3.5.0ProjectSTM32F10x_StdPeriph_Template 目录下的stm32f10x_conf.h、stm32f10x_it.c、stm32f10x_it.h 三个文件复制到 USER 文件夹中。3、打开 MDK 软件,新建一个工程 Proj_GPIO 保存到 Proj_GPIO/USER 中。CPU 选择 STM32F103ZE,如图2;图 24、新建一个空

5、文档 main.c 保存到 USER 中,然后根据绝对路径将文件对应添加到工程中,如右图。5、配置工程属性,右键点击工程文件中的 Target 1 选择 Options for Target Target 1打开工程选项对话框。做如下修改:1)Output 选项勾选 Create HEX File,然后点击 Select Folder for Objects 按钮定位输出文件保存目录到工程的 OBJ 文件;2)Listing 选项,同样点击 Select Folder for Listings 定位输出文件保存目录到工程的OBJ 文件;3)C/C+选项,Define 中填入STM32F10X_

6、HD, USE_STDPERIPH_DRIVER 系统的两个基本宏定义;配置 Include Paths 属性,加入工程中包含头文件的目录;如右图4)后面 Debug 和 Utilities 两个选项如果使用 J-link 或者其他调试器则需要做对应的修改,否则不用。6、根据实验任务硬件原理图编写代码实现四个按键控制 led 灯亮灭。1)其中用户按键和 LED 原理图如下:图 52)根据原理图初始化各 IO 引脚,编写控制函数,然后主函数中调用。、/* 函数名称:io_init* 函数功能:初始化 PA0 PE2 PE3 PE4 为输入口 PE5 PB5 为输出口* 参数 : 无*/void

7、io_init()GPIO_InitTypeDef gpin_init_struct;/使能每个 IO 口的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);gpin_init_struct.GPIO_Pin = GPIO_Pin_0; /PA0 引脚gpin_init_struct.GPIO_Speed = GPIO_Spe

8、ed_2MHz; /IO 速度为 2MHzgpin_init_struct.GPIO_Mode = GPIO_Mode_IPD; /下拉模式GPIO_Init(GPIOA, /A 口按键gpin_init_struct.GPIO_Pin = GPIO_Pin_5;gpin_init_struct.GPIO_Speed = GPIO_Speed_2MHz;gpin_init_struct.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIOB, /B 口 led1 GPIO_Init(GPIOE, /E 口 led2 gpin_init_struct.GPIO_

9、Pin = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;gpin_init_struct.GPIO_Speed = GPIO_Speed_2MHz;gpin_init_struct.GPIO_Mode = GPIO_Mode_IPU; /上拉模式GPIO_Init(GPIOE, /E 口按键/* 函数名称: key_led* 函数功能: 根据按键情况控制 led 灯的亮灭 s1 s2 控制 led1;s3 s4 控制 led2* 参数 : 无* 其他:其中 LED1_ON LED1_OFF LED2_ON LED2_OFF 为全局宏定义*/void key_led()if

10、(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_4)=0) LED1_ON;if(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_3)=0) LED1_OFF;if(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_2)=0) LED2_ON;if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)=1) LED2_OFF;3)代码编写完成后编译链接,通过下载软件将 hex 文件下载到实验板中运行验证。#include “stm32f10x.h“#define LED2_ON GP

11、IO_ResetBits(GPIOB, GPIO_Pin_5)#define LED2_OFF GPIO_SetBits(GPIOB, GPIO_Pin_5)#define LED1_ON GPIO_ResetBits(GPIOE, GPIO_Pin_5)#define LED1_OFF GPIO_SetBits(GPIOE, GPIO_Pin_5)void io_init();void key_led();int main()io_init();while(1)key_led();实验二、ucos 操作系统的移植一、实验目的1、掌握 ucos 到 STM32 的移植方法;2、熟悉通过 C 语

12、音处理底层寄存器的技巧;3、了解 STM32 在 ucos 任务切换时的处理;4、规范编程格式。二、实验内容本次实验通过用 C 语言编写 6 个操作系统相关函数和用汇编语言编写 4 个与处理器相关的函数,将实时操作系统 C/OS-移植到芯片 STM32F103ZE 中,并创建两个用户任务点亮 led。学会操作系统的移植方法,深入掌握嵌入式操作系统 C/OS-在初始化任务和任务调度的实现方法,直观了解实时操作系统的体系结构和设计思想。三、预备知识基本单片机硬件知识、单片机软件编程语言、程序创建和调试的基本方法、ucos 操作系统的任务调度原理、STM32 的寄存器架构。四、实验设备及工具硬件:S

13、TM32 开发平台软件:STM32 官方库;PC 机操作系统 Windows 98、Windows 2000 或 Windows XP;KEIL MDK 集成开发环境;串口转 usb 驱动。五、实验步骤1、按实验一的步骤新建一个工程 Proj2_ucos。2、将移植好的 ucos 源代码整个拷贝到我们的新建的工程目录中,然后按对应的文件路径添加到 keil 工程里(os_dbg.c 和 os_dbg_r.c 只添加一个) ,如图 6 和图 7。图 6 图 73、配置工程相关属性(与实验一库应用配置一样) ,记得将 ucos 的头文件路径添加到工程的 include path 上面去,找到 st

14、m2f10x_it.c 的 PendSV_Handler 函数注释掉,main 文件中将 includes.h 包含进来,主函数为空,编译通过。4、在 main.c 中建立 sys_init()函数编写操作系统运行需要的硬件相关初始化(见代码) ,然后修改 stm32f10x_it.c 中的系统心跳中断函数并加入头文件 includes.h(见代码, ) 。/* 函数名称:sys_init* 函数功能:嵌套向量中断优先级分组,时钟心跳定时初始化 1/200 s* 参数 : 无*/void sys_init()NVIC_PriorityGroupConfig(NVIC_PriorityGroup

15、_2);SysTick_Config(SystemCoreClock/200);/* brief This function handles SysTick Handler.* param None* retval None*/void SysTick_Handler(void)OSIntEnter();OSTimeTick();OSIntExit();5、编写用户任务函数和相关的初始化。/* 函数名称: led_init* 函数功能: 初始化 LED* 参 数: * 其 他:*/void led_init()GPIO_InitTypeDef gpin_init_struct;RCC_APB2

16、PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE);gpin_init_struct.GPIO_Pin = GPIO_Pin_5;gpin_init_struct.GPIO_Speed = GPIO_Speed_2MHz;gpin_init_struct.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIOB, /B 口 led1 GPIO_Init(GPIOE, /E 口 led2 6、最后在主函数中创建任务并启动操作系统。编译并调试运行。/* 函数名称: my_task* 函数

17、功能: 用户任务* 参 数: * 其 他:*/void my_task()sys_init();led_init();OSStatInit();while(1)LED1_ON;LED2_OFF;OSTimeDly(50);LED1_OFF;LED2_ON;OSTimeDly(100);实验三、ucos 操作系统的任务通信一、实验目的1、掌握 ucos 任务间通信的各种方法;2、了解嵌入式操作系统任务间可能出现的资源冲突;#include “stm32f10x.h“#include “includes.h“#define LED2_ON GPIO_ResetBits(GPIOB, GPIO_Pi

18、n_5)#define LED2_OFF GPIO_SetBits(GPIOB, GPIO_Pin_5)#define LED1_ON GPIO_ResetBits(GPIOE, GPIO_Pin_5)#define LED1_OFF GPIO_SetBits(GPIOE, GPIO_Pin_5)OS_STK task_stk128;void my_task(void);void led_init(void);void sys_init(void);int main()OSInit();OSTaskCreate(my_task, (void *)0, (OS_STK *)OSStart();w

19、hile(1);3、掌握 ucos 中信号量和邮箱的应用;4、规范编程格式。二、实验内容本次实验通过用 C 语言编写基于 ucos 操作系统下的多个用户任务,并且实现任务间的正确通信。通过信号量处理公共资源的等待和使用,通过邮箱实现任务间的多个数据变量的传递。建立正确的操作系统编程理念,深入掌握 C/OS-中信号量与邮箱的创建和使用,了解各任务间通信方法的大概原理及优缺点。三、预备知识基本单片机硬件知识、单片机软件编程语言、程序创建和调试的基本方法、ucos 操作系统的任务调度原理。四、实验设备及工具硬件:STM32 开发平台。软件:STM32 官方库;PC 机操作系统 Windows 98、

20、Windows 2000 或 Windows XP;KEIL MDK 集成开发环境;串口转 usb 驱动。五、实验步骤1、建立基于操作系统 C/OS-的工程 Proj3_ucos1,并配置好工程各项属性。2、创建用户任务文件 task.c 和 task.h 两个文件,详细代码如下。/task.c 文件代码#include “task.h“INT32U NUM_COUNT1;INT32U NUM_COUNT2;void test_sem(void);void my_task()while(1)test_sem();void test_sem()INT8U sem_err;INT32U tmp;t

21、mp = NUM_COUNT1;OSTimeDlyHMSM(0,0,0,50);/用延时代替任务的其他任务tmp+;NUM_COUNT1 = tmp;OSSemPend(NUM_COUNT, 500, tmp = NUM_COUNT2;OSTimeDlyHMSM(0,0,0,50);/用延时代替任务的其他任务tmp+;NUM_COUNT2 = tmp;OSSemPost(NUM_COUNT);代码中,在 task1.c 中定义两个全局变量 NUM_COUNT1 和 NUM_COUNT2,两个变量在my_task 函数里用于记录该任务循环的总次数,区别在与 NUM_COUNT1 直接操作,而NU

22、M_COUNT2 则通过信号量的方法进行操作。3、在 main 函数中初始化操作系统后创建一个信号量 NUM_COUNT,然后用 OSTaskCreate/task.h 文件代码#ifndef _MY_TASK_H#define _MY_TASK_H#include “includes.h“extern OS_EVENT *NUM_COUNT;extern void my_task(void);#endif创建两个任务,优先级分别是 8 和 9,两个任务的入口地址都是 task1.c 文件中的 my_task函数。4、编译通过后调试,在 debug 界面中,将 NUM_COUNT1,NUM_C

23、OUNT2 两个全局变量加入到变量观察窗口 watch1 中,然后在 task.c 的 my_task 函数里面设置断点,运行并观察两个变量的变化,理解信号量的使用。5、关于操作系统邮箱的应用由例子工程 Proj3_ucos2 实现,请自行理解代码。NUM_COUNT = OSSemCreate(1); /创建一个信号量OSTaskCreate(my_task, (void *)0, (OS_STK *)OSTaskCreate(my_task, (void *)0, (OS_STK *)实验四、ucos 操作系统的文件系统实现一、实验目的1、了解文件系统 FATFS 的基本实现原理;2、掌握

24、 FATFS 的移植步骤;3、掌握基于 ucos 中 FATFS 的应用;4、掌握 STM32 对 SD 卡的读写操作;5、规范编程格式。二、实验内容本实验实现将 FAT 文件系统移植到 ucos 中,并基于 ucos 的文件系统编写用户任务进行测试,通过对文件系统的移植实验深入掌握对嵌入式相关驱动移植的基本步骤,建立正确的嵌入式操作系统驱动移植理念,并且熟悉掌握 ucos 操作系统下的文件系统的基本应用,了解其优缺点。三、预备知识基本单片机硬件知识、单片机软件编程语言、程序创建和调试的基本方法、ucos 操作系统的任务调度原理、STM32 单片机中的 SD 卡驱动、文件系统的操作函数、FAT

25、 文件系统的基础知识。四、实验设备及工具硬件:STM32 开发平台。软件: PC 机操作系统 Windows 98、Windows 2000 或 Windows XP;KEIL MDK 集成开发环境;串口转 usb 驱动;STM32 官方库;FATFS 的官方库; STM32 的 uart 驱动和 SD 卡驱动源码。五、实验步骤1、拷贝实验三的所有代码到新的目录地下,删除 USER 和 OBJ 文件夹里工程相关的文件,重新建立实验四的工程并命名为 Proj4_FATFS,配置好工程各项属性。2、在 USER 文件夹里面创建文件夹 myapp,将串口驱动uart 和 SD 卡驱动 sdio_sd

26、card 的源代码拷贝到该文件夹里面,并添加到工程中 USER。3、拷贝 FAT 文件系统源码到 myapp 文件夹。在 keil 的工程中增加一个文件夹 FATFS 并添加diskio.c、ff.c、cc936.c 三个文件到里面,如右图。4、尝试编译字符表文件 cc936.c 可能发现出错:#error directive: This file is not needed in current configuration. 这是因为在 ff.h 中 _CODE_PAGE 这个宏的定义值不是 936 和长文件名宏定义_USE_LFN 的值不是 1 导致的。修改成对应的值后该文件的编译即可通过

27、(如果用其他字符表文件同理) 。5、移植 FAT 文件系统需要做的事情。1)FATFS 是一个通用的文件系统模块,用于在小型嵌入式系统中实现 FAT 文件系统。FatFs 的编写遵循 ANSI C,因此不依赖于硬件平台。它可以嵌入到便宜的微控制器中,如 8051,PIC,AVR,SH,Z80,H8,ARM 等等,不需要做任何修改。FATFS 源代码的获取,可以到官网下载 http:/elm-chan.org/fsw/ff/00index_e.html; 解压文件会得到两个文件夹,一个是 doc 文件夹,保存 FATFS 的一些使用文档和说明。另一个是 src 文件夹,保存代码源文件。FAT 文

28、件系统源码和 sd 卡读写的底层驱动。2)移植 FAT 文件系统只需根据硬件中可能接入的物理存储模块对文件系统的底层 IO驱动(diskio.c)进行修改,具体需要修改的函数有:DSTATUS disk_initialize (BYTE);/存储介质的初始化DSTATUS disk_status (BYTE);/读取存储介质的状态DRESULT disk_read (BYTE, BYTE*, DWORD, BYTE);/读取数据DRESULT disk_write (BYTE, const BYTE*, DWORD, BYTE);/写入数据DRESULT disk_ioctl (BYTE, B

29、YTE, void*);/读取存储介质文件系统相关信息DWORD get_fattime (void);/返回文件系统的时间3)diskio.c 文件中添加头文件 sdio_sdcard.h、ff.h,增加 SD 卡的驱动号 0 如下:/* Correspondence between physical drive number and physical drive. */#define SD_CARD 0#define ATA 1#define MMC 2#define USB 34)diskio.c 五个函数具体代码:DSTATUS disk_initialize (BYTE drv /*

30、 Physical drive nmuber (0) */)switch(drv)case SD_CARD:/SD 卡if(SD_Init() = SD_OK)return RES_OK;elsereturn RES_NOTRDY;return RES_NOTRDY;DSTATUS disk_status (BYTE drv /* Physical drive nmuber (0) */)switch(drv)case SD_CARD:/SD 卡if(SD_GetStatus() = SD_TRANSFER_ERROR)return STA_NOINIT;elsereturn STA_PROT

31、ECT;default:return STA_NODISK;DRESULT disk_read (BYTE drv, /* Physical drive nmuber (0) */BYTE *buff, /* Data buffer to store read data */DWORD sector,/* Sector address (LBA) */BYTE count /* Number of sectors to read (1255) */)switch (drv) case SD_CARD :for(;count0;count-)if(SD_ReadBlock(buff, secto

32、r0;count-)if(SD_WriteBlock(uint8_t *)buff,sector22);if(SD_ReadBlock(RxBuffer, 0, 512) = SD_OK)for(i=0; i512; i+)printf(“%X “, RxBufferi);7)如果上一步能初始化并检测出 SD 卡的大小,读出前 512 个字节的数据,则说明SD 卡和驱动函数都正常。下一步设计一个 FAT 测试函数:实现检测 TEST.txt 文件是否存在,存在则读取文件中的前 100 个字节内容并串口输出;然后打开 TEST2.txt 文件(不存在则创建)写入读取到的内容(没有内容则写入“is

33、 no file TEST.txt!”) ;打开 TEST2.txt 读取文件中的前 100 个字节内容并串口输出。具体代码如下。void test_FAT()FATFS fs;FIL f_1, f_2;INT32U read_count=21;FRESULT error;error = f_mount(0, /挂载 SD 卡error = f_open(if(error=FR_OK)error = f_read(printf(“nrread the file: TEST.txt nr“);printf(“read 100 bytes, then return %d bytes! nr“, r

34、ead_count);printf(“the data is :nr“);printf(char*)RxBuffer);error = f_close( error = f_open(printf(“nrwrite test2.txt %d words!nr“, read_count);error = f_write(if(error=FR_OK)printf(“write OK ! %d words are writednr“, read_count);elseprintf(“write errornr“);error = f_close( error = f_open(if(error=F

35、R_OK)error = f_read(printf(“nrread the file: TEST2.txt nr“);printf(“read 100 bytes, then return %d bytes! nr“, read_count);printf(“the data is :nr“);printf(char*)RxBuffer);error = f_close( 8)至此,我们已经将 FATFS 移植成功了,下面我们设计一个基于 ucos 的文件系统应用实验,实现在用户中检测是否有 SD 卡插入,如果有则任务没循环一次在 SD 卡中的文件 mytask.txt 的末尾写入一句“这是

36、本任务的第 xx 次循环 ”,然后在主函数中创建两个以上的该任务的线程(这里需要注意实验三的资源冲突问题!) 。9)具体代码,详见实例工程!*扩展知识 1:在本工程中的 SD 底层驱动中,因为用 32 位存储 SD 卡的容量大小,所以最大只能识别到 4GB,如果采用大于 4G 的卡进行测试则读出的容量是错误的。*扩展知识 2:对于 FAT32 的 MBR 区不一定是在 0 扇区中。*扩展知识 3:配置 ff.h(可能是 ffconf.h)文件中 _USE_STRFUNC 宏定义为 1,可以使用 f_putc、f_puts 、f_printf、f_gets、f_eof、f_error 等函数实验

37、五、基于 ucos 操作系统的网络模块一、实验目的1、了解 W5500 网络模块的基本实现原理;2、掌握 ucos 下网络底层库的移植步骤;3、掌握基于 ucos 的网络编程 TCP、UDP 思路;4、了解嵌入式软件设计的分层思路;二、实验内容本实验通过 STM32 的 SPI 协议读写 W5500 网络模块,移植网络协议驱动到 ucos 嵌入式操作系统,并通过编写 ucos 操作系统的应用任务实现实验板和上位机的网络通信。了解基于网络通信的嵌入式软件设计的思路。三、预备知识本实验要求学生具备基本的 C 语言读写能力、基本单片机软硬件知识、了解 SPI 协议、了解基础的网络协议应用、ucos

38、操作系统的用户任务设计能力四、实验设备及工具硬件:STM32 开发平台、PC 机软件: keilMDK 编程环境、串口转 usb 驱动、STM32 官方库、移植好的 ucos 源码、基于STM32 的 SPI 驱动库、基于 STM32 的 uart 驱动库、W5500 网络模块驱动库、五、实验步骤1、了解网络编程中 socket、UDP 的基本实现原理。2、了解 W5500 网络模块的基本功能和官方驱动库提供的代码架构。W5500 是一款全硬件 TCP/IP 嵌入式以太网 硬件层用户任务层应用驱动层硬件驱动层W50.c 50.hSTM32的 SPI接 口W50网 络 模 块socket. so

39、cket.h用 户 任 务 程 序wizchip.c wizhip.开 始硬 件 资 源 的 初 始 化复 位 W50模 块 并 检 测网 线 物 理 连 接 是 否 有 效设 置 IP等 多 项 网 络 参 数监 测 SOCKET连 接并 做 出 对 应 处 理监 测 UDP连 接 并 做出 对 应 处 理控制器,为嵌入式系统提供了更加简易的互联网连接方案。W5500 集成了 TCP/IP 协议栈,10/100M 以太网数据链路层(MAC) 及物理层( PHY) ,使得用户使用单芯片就能够在他们的应用中拓展网络连接。原厂公司位于韩国,中文官网:http:/ 的驱动可在官网中找到下载,下载解压

40、后的目录 Ethernet 为 W5500 的官方驱动库。其中 W5500.c 和 W5500.h 提供 W5500 的硬件接口函数,实现对 W5500 寄存器的读写驱动;socket.c 和 socket.h 提供网络协议 socket 的 API 实现和用户接口函数;wizchip_conf.c 和 wizchip.h 提供对芯片应用驱动和配置接口,例如芯片的复位、IP 地址的初始化,注册用户的 SIP 驱动函数等。整体架构如右图:3、基于 STM32 的移植。由上图我们知道对于官方驱动库,我们需要提供 STM32 的 SPI 协议驱动接口。具体需要我们手动实现的函数是:wizchip_c

41、ris_enter :进入临界区的函数,可以不管wizchip_cris_exit :退出临界区的函数,也可以不管wizchip_cs_select :输出有效片选信号的函数,控制 CS 输出低电平的函数,必须实现wizchip_cs_deselect :控制 CS 输出高电平的函数,必须实现wizchip_bus_readbyte :SPI 总线读取一字节数据函数,必须实现wizchip_bus_writebyte :SPI 总线写一字节数据函数,必须实现正常情况下我们需要找到驱动库中对应的函数原型进行修改,但是因为官方库中提供了一个用户接口,可以将我们已有对应的 SPI 函数入口注册并替换

42、掉上述函数,所以我们可以独立编写文件 SPI.c 和 SPI.h,然后初始化时调用“注册函数” (注册函数在 wizchip) 。工程中我们创建文件 confForW5500.c 和 confFroW5500.h 实现对 W5500 的配置和各项初始化,代码详见工程文件。4、用户测试任务。根据网络编程基础知识, 我们编写一个回环测试任务,对网络模块的 TCP/IP 功能进行 基础测试。具体分为实现socket 功能和 UDP 两个功能, 流程图如下:根据上述流程图,我们创建文件 loopback.c 和 loopback.h 实现对应的各项功能函数。然后基于 ucos 操作系统下建立用户任务

43、my_task() 进行各项功能的顺序调用,主函数中启动操作系统并创建该任务。5、上位机连接测试。将工程编译调试通过并烧写到实验板,用网线连接 PC 机和 W5500 网络模块,实验板上电启动,根据我们编写的用户任务 STM32 将会启动一个 SOCKET 服务端并绑定实验板的 IP 和程序中配置的端口。PC 上机设置各项网络参数,让 PC 机和实验板处于同一网段(局域网) ,然后打开命令提示符窗口 CMD,输入 ping 命令:ping 192.168.xxx.xxx (实验板 IP) ,观察是否能够收到实验板反馈的数据信息。如下图:PC 机打开调试软件 NetAssist.exe,选择 TCP Client,服务器 IP 地址设置成实验板IP,服务端口设置成实验板中打开的 socket 端口,点击连接看能否成功连接实验板 socket服务,连接成功后在软件的发送数据区随便输入发送内容,点击发送,查看接收到的反馈信息,如下图6、自行设计编写应用任务,实现实验板网络方面新的需求。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 专业基础教材

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报