1、基于STM32的嵌入式系统设计实验实验指导书 实验指导书(实验)课程名称:基于STM32的嵌入式系统设计实验 实验一 电路板焊接与调试一实验简介完成实验板上部分元件的焊接,焊接完成后进行基本测试。二实验目的及原理掌握STM32F103实验板的基本原理,掌握焊接电路板的基本技能,掌握下载测试程序的基本方法。原理:详细内容参考教材基于STM32的嵌入式系统原理与设计MCU和周边电路如图为MCU及其周边电路。图1 MCU及其周边电路1. 唤醒电路,高有效,不按时接220K电阻下拉。2. 复位电路,低有效。带RC启动复位。3. 配置启动,用跳线选择BOOT1和BOOT0接高电平或低电平。4. 高速晶振
2、电路,采用8M晶振,在STM32内部倍频为72M。5. AD参考电路,采用LC滤波,可跳线选择直接接VCC或通过TL431稳压电路产生的参考电压。6. 后备电池。可通过跳线选择直接接VCC或电池。7. AD输入,可选择使用RC滤波,共8路。8. 低速晶振电路,选用32.768kHz晶振,为产生准确的串口波特率。 USB转串口电路 USB转串口电路可以方便没有串口的笔记本电脑用户通过USB接口下载代码到FLASH中,及进行RS232串行通信。图2 USB转串口接口电路USB转串口芯片是CP2102,该芯片稳定性较好。当其正常工作的时候,灯LED6亮。该芯片DP/D+引脚连MINI USB接口的脚
3、3,DM/D-引脚连MINI USB接口的脚2,为一对USB输入输出线。TXD与RXD引脚接MCU的PA10(USART1_RX)和PA9(USART1_TX)。 I2C接口电路本书选择的EEPROM是AT24C02是256字节的电可擦出PROM,通过I2C协议与STM32进行通信,连接十分简单。 EEPROM虽然容量只有256字节,但是读写比较方便,与MCU连线少,被广泛的使用在智能仪器、汽车电子、工业控制、家用电器等 场合。实例中使用AT24C02存储屏幕是否校准过及屏幕各个角的模拟值等。图3 I2C接口电路A2、A1、A0为做级联时使用,这里只有1片24C02,接地即可。WP为写保护,不
4、保护的时候接地。SCL为I2C时钟,SDA为I2C数据,因开漏输出,需外部接上拉电阻上拉。三实验内容学习STM32F103实验板电路的原理图焊接电路板上部分电阻电容焊接LED和蜂鸣器焊接ASM1117芯片IIC芯片AT24C02下载测试代码到焊接好的STM32实验板,测试实验板是否工作正常。实验原理根据教材。四实验设备硬件部分:PC计算机(宿主机)、STM32实验板、电烙铁软件部分:测试软件(源代码)、ISP下载软件五实验步骤1.焊接电路板部分电阻电容2.焊接LED和蜂鸣器3.焊接ASM1117芯片IIC芯片AT24C024.焊接晶振5.检查和清洁实验板。注意需在测试前检查电源与地之间是否短路
5、才能进入下一步。6.下载测试代码到焊接好的电路板,测试焊接是否正确。测试过程通过串口调试助手输出测试信息,依次测试串口、LED、按键、蜂鸣器、IIC和SPIFLSH的工作情况。7.如测试不通过,根据现象检查电路,找到问题后进行修正,然后重新测试。实验二 流水灯和按键实验一实验简介从无到有构建第一个STM32工程,并实现流水灯效果和按键响应。二实验目的及原理掌握STM32开发环境,掌握从无到有的构建工程,学会GPIO基本操作。原理:详细内容参考教材基于STM32的嵌入式系统原理与设计输入输出端口GPIOGPIO是常规输入输出端口,STM32F103VE有PA、PB、PC、PD、PE共5个16位的
6、GPIO。STM32的GPIO都是可编程的,具有很多复用功能。从图1.7.1可见,通过对输出控及肖特基触发器及各个开关的控制,可以选择使用GPIO功能或复用功能。当听过编程,将输出控制设置为选择复用功能的时候,就从来自片上外设的复用功能输出端采集数据,反之采集输出数据寄存器上的数据。在GPIO方式下也可以配置为很多种模式,这和51单片机是有明显的区别,功能性强了很多。这些模式有:输入浮空、输入上拉、输入下拉、模拟输入、开漏输入、推挽输出、推挽复用、开漏复用。在默认的模式下为输入浮空。每个I/O端口可以通过对GPIO寄存器写操作来编程成一种模式,GPIO寄存器包括端口配置低寄存器GPIOx_CR
7、L、端口配置高寄存器GPIOx_CRH、端口输入寄存器GPIOx_IDR、端口输出寄存器GPIOx_ODR、端口位设置清除寄存器GPIOx_BSRR、端口为清除寄存器GPIOx_BRR、端口锁定寄存器GPIOx_LCKR。所有x的范围为(A-E)。80个GPIO分为5组,A-E就是分组号。例如,GPIOB_CRL就是B组GPIO的端口配置低寄存器,GPIOC_CRL就是C组GPIO的端口配置低寄存器。构建工程如图所示:图1: 工程文件固件库构建过程:在D盘建立一个目录,在其下建立一个子目录firstpeoject作为工作目录。然后,又在其下建立了一些子目录。当然,使用的工具就是WINDOWS资
8、源管理器。这个目录可以放在任何一个盘或目录里,没有限制。现在开始拷贝文件。1)拷贝内核文件和驱动支持文件、启动文件将固件库LibrariesCMSISCM3CoreSupport目录下的两个文件core_cm3.c和core_cm3.h文件拷贝到刚刚创建的stm32libm3子目录中。将固件库LibrariesCMSISCM3DeviceSupportSTSTM32F10x目录下的stm32f10x.h、system_stm32f10x.c、system_stm32f10x.h也拷贝到stm32libm3子目录中。将LibrariesCMSISCM3DeviceSupportSTSTM32F1
9、0xstartuparm下的启动代码也拷贝到application子目录中。启动文件有好几个,笔者的STM32硬件芯片是STM32F103VET6,是属于高密度的芯片,因此应该拷贝startup_stm32f10x_hd.s。启动开发,启动文件startup_stm32f10x_hd.s是程序开始的地方。2)接下来拷贝设备驱动程序。将LibrariesSTM32F10x_StdPeriph_Driverinc目录下的所有文件拷贝到stm32libinc目录下。将LibrariesSTM32F10x_StdPeriph_Driversrc目录下的所有文件拷贝到stm32libsrc目录下。3)拷
10、贝外设中断函数文件和固件库配置文件拷贝固件库的Project STM32F10x_StdPeriph_Templat目录下的文件stm32f10x_it.h、stm32f10x_it.c和stm32f10x_conf.h文件到application子目录中。三实验内容熟悉MDK KEIL开发环境,构建基于固件库的工程,编写代码实现流水灯工程,按键后能改变流水灯速度。通过ISP下载代码到实验板,查看运行结果。使用JLINK下载代码到目标板,查看运行结果,使用JLINK在线调试。实验原理根据教材。四实验设备硬件部分:PC计算机(宿主机)、亮点STM32实验板、JLINK。软件部分:PC机WINDO
11、WS系统、MDK KEIL软件、ISP软件。五实验步骤1. 熟悉MDK KEIL开发环境2. 熟悉串口编程软件ISP3. 查看固件库结构和文件4. 建立工程目录,复制库文件5. 建立和配置工程6. 编写代码7. 编译代码8. 使用ISP下载到实验板9. 测试运行结果10. 使用JLINK下载到实验板11. 单步调试12. 记录实验过程,撰写实验报告实验三 串口发送和接收实验一实验简介编写代码实现串口发送和接收,将通过串口发送来的数据回送回去。 二实验目的掌握STM32基本串口编程,进一步学习中断处理。原理:详细内容参考教材基于STM32的嵌入式系统原理与设计STM32的同步异步收发器USART
12、和传统的51单片机或PC即串行口UART稍有区别:通用同步异步收发器(USART)提供了一种灵活的方法与使用异步串行数据格式的外部设备之间进行全双工数据交换。USART利用分数波特率发生器提供宽范围的波特率选择。 另外,它还允许多处理器通信。 USART也可以使用DMA方式直接将接收的数据存储到内存或从内存中批量发送数据,也支持多种中断方式。 接口通过三个引脚与其他设备连接在一起。接收数据输入(RX)和发送数据输出(TX)及地(GND)。如果使用更复杂的功能,如硬件流控制的时候,需要更多的引脚。RX:接收数据串行输入。 TX:发送数据输出。 串行异步通信USART库函数串行通信库函数在stm3
13、2f10x_usart.h中声明,在stm32f10x_usart.c中实现。外设库函数文件USART库函数如下表所示:串行异步通信USART库函数一览函数名描述USART_DeInit 将外设USARTx寄存器重设为缺省值 USART_Init 初始化外设USARTx寄存器 USART_StructInit 把USART_InitStruct中的每一个参数按缺省值填入 USART_Cmd 使能或者失能USART外设 USART_ITConfig 使能或者失能指定的USART中断 USART_DMACmd 使能或者失能指定USART的DMA请求 USART_SetAddress 设置USART
14、节点的地址 USART_WakeUpConfig 选择USART的唤醒方式 USART_ReceiverWakeUpCmd 检查USART是否处于静默模式 USART_LINBreakDetectLengthConfig 设置USART LIN中断检测长度 USART_LINCmd 使能或者失能USARTx的LIN模式 USART_SendData 通过外设USARTx发送单个数据USART_ReceiveData 返回USARTx最近接收到的数据 USART_SendBreak 发送中断字 USART_SetGuardTime 设置指定的USART保护时间 USART_SetPrescale
15、r 设置USART时钟预分频 USART_SmartCardCmd 使能或者失能指定USART的智能卡模式 USART_SmartCardNackCmd 使能或者失能NACK传输 USART_HalfDuplexCmd 使能或者失能USART半双工模式 USART_IrDAConfig 设置USART IrDA模式 USART_IrDACmd 使能或者失能USART IrDA模式 USART_GetFlagStatus 检查指定的USART标志位设置与否 USART_ClearFlag 清除USARTx的待处理标志位 USART_GetITStatus 检查指定的USART中断发生与否 USA
16、RT_ClearITPendingBit 清除USARTx的中断待处理位三实验内容编写主程序,初始化串口1,设置波特率为9600,无校验,数据位8位,停止位1位。编写中断服务程序代码实现将发送过来的数据回送。四实验设备硬件部分:PC计算机(宿主机)、亮点STM32实验板、JLINK、示波器。软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件、串口调试助手。五实验步骤1编写串口初始化代码2编写中断服务程序代码3编译代码,使用JLINK或ISP下载到实验板4记录实验过程,撰写实验报告实验四 串口DMA双缓冲实验一实验简介使用双缓冲区,同时进行串口数据接收和数据处理。二实验目的及原
17、理进一步掌握串口编程,进一步学习DMA编程。学习使用双缓冲兵乓操作,理解互斥资源。进一步学习使用DMA和中断,提高编程能力。原理:详细内容参考教材基于STM32的嵌入式系统原理与设计直接存储器存取(DMA)用来提供在外设和存储器之间或者存储器和存储器之间的高速的无需CPU干预的数据传输。数据通过DMA快速地移动,例如从串口到内存,当在内存中收到一定数量的数据时才发出一个中断,CPU才放下手头的工作去处理,这就节省了CPU的资源来做其他操作。 STM32有两个DMA控制器,其中DMA1有7个通道,DMA2有5个通道,每个通道专门用来管理来自于一个或多个外设对存储器访问的请求。另外,还有一个仲裁器
18、来协调各个DMA请求的优先权。STM32在硬件上设计了这么多的DMA通道是煞费苦心的,用好DMA控制器,可以大大的提高系统的吞吐量。在PC机上,将硬盘数据复制到内存,就采用DMA模式,把拷贝数据的任务交给DMA来执行,CPU就可以去做别的事情了。在STM32下也是如此,在编程中不采用DMA模式,全靠CPU去辛苦劳作,是巨大的损失。要使用好DMA控制器,首先要了解它。 DMA框图 STM32有一大堆的可以使用DMA与内存进行直接交互的外设,但是只有2个DMA控制器。这就导致,当外设要进行DMA传输的时候,首先要获得批准。当然,哪几个外设可以使用哪些通道,是预先就设计好了的,在使用哪个通道的问题上
19、就不需要过多考虑,但是编程人员必须认真对待这个问题,否则DMA传输就用不起来。DMA传输可以从内存到外设,也可以从外设到内存,另外,内存到内存的DMA传输也是允许的,这个很方便。大部分的外设是APB外设,但是,也有两个AHB外设,以太网和USB可以参加,它们很需要高速的DMA传输! DMA传输要申请,有申请就得成立一个总裁机构,于是,两个DMA控制器都设立了仲裁委员会。 获得了批准的设备就可以在DMA控制器的控制下,和内存进行数据交换,但是数据传输的方向在批准的时候就要填写进申请表,还有一些其他的参数也要仔细填写进去(如传输的数据量,是按字传输还是半字、字节传输等,传输完成后是否发中断等),批
20、准后就严格按申请表的内容进行数据传输。 当然,和一般的协议一样,还有附加条款:当主人CPU需要访问SRAM的时候,DMA请求会暂停CPU访问系统总线达若干个周期,总线仲裁器执行循环调度,以保证CPU至少可以得到一半的系统总线(存储器或外设)带宽。另外,可编程的数据传输数目最大为65535。 三实验内容假设,有一个设备用RS232串行口以256000的波特率发送数据,并且大概每80毫秒发送8个字节的数据。使用串口调试助手,仿真这个设备。要求将该设备发送的数据求平均值后送回。采用DMA方式接收数据,接收完成后发生中断,然后DMA通道使用另一个缓冲区继续接收数据。而这时CPU可以处理数据,计算刚接收
21、到数据的平均值。然后送回。这样,CPU和DMA并行工作。四实验设备硬件部分:PC计算机(宿主机)、亮点STM32实验板、JLINK。软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件、串口调试助手。五实验步骤1编写主程序代码,创建2个缓冲区,设置串口、DMA。2编写中断服务程序代码3编译代码,使用JLINK或ISP下载到实验板4记录实验过程,撰写实验报告实验五 I2C实验一实验简介编程实现对使用I2C接口的EPC02芯片进行写和读操作。二实验目的及原理熟练掌握I2C编程,学会对EPC02的读写操作。原理:详细内容参考教材基于STM32的嵌入式系统原理与设计24C02是电可擦除
22、PROM,即EEPROM,其容量是256 X 8bit,,即2K bits。24C02接口方式为两线I2C接口。其总线时序如图:图124C02总线时序由图可见, 24C02的读写时序完全采用I2C方式,因此,既然已经实现了I2C驱动函数,就可以调用这些函数来实现24C02的驱动。寻址24C02,它的地址应该是什么呢?图2 24C02地址格式因为在STM32实验板上,将A2A1A0接地,那么A2,A1,A0三位都为0。最低位LSB为读写操作位,读为高电平,写为低电平。因此,写地址为0XA0,读地址为0XA1。如果有多个24C02,那么应该将A2A1A0连接到不同的电平,让它们的地址不同,这样就可
23、以分别访问。在写操作的时候,首先给出启动条件,然后向24C02发送器件地址,被寻址的24C02会应答。在接收应答成功后,再发送8位的字地址。24C02接收到这个地址后,会产生应答, 接收到这个应答后可以发送8位的数据。在接收到8位的数据后EEPROM又会应答,这时必须给出停止条件来结束。在进行读操作的时候,流程基本相同,但需要在发送了器件地址和字地址,接收到应答后,开始读之前,发送一个启动条件再发送一个写地址给器件。三实验内容编写I2C驱动程序,使用驱动程序初始化EPC02,判断设备正确性。写256个0x5A到EPC02,读出并发送给串口,通过串口调试助手判别是否读到的都是0x5A.四实验设备
24、硬件部分:PC计算机(宿主机)、亮点STM32实验板、JLINK。软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件、串口调试助手。五实验步骤1参考教材I2C部分,编写I2C驱动程序。2编写主程序3编译代码,使用JLINK或ISP下载到实验板4记录实验过程,撰写实验报告实验六 SPI FLASH实验一实验简介编程实现对SPI接口的W25Q64进行读写操作。二实验目的及原理熟练掌握SPI编程,学会对的W25Q64读写操作。原理:详细内容参考教材基于STM32的嵌入式系统原理与设计SPI FLASH基本结构 以SPI接口的FLASH芯片W25Q64为例来讲解这一节。W25Q64有
25、32K个可编程的页(Page)组成,每个页有256个字节。可以计算一下:32K*256=8M字节。因此W25Q64有8Mbyte(64Mbit)的可读写存储空间,地址从0x0到0x7FFFFF。对于SPI FLASH来说,页是一次写入的最小单位,编程中,一次可以对256字节的数据块进行写操作。16个页组成一个扇区(Sector),所以一个扇区就是4K,4096字节。在擦除操作的时候,可以一次擦除1个扇区(4K块)、8个扇区(32KB块)、16个扇区(64KB块)或整个芯片!16个扇区可以组成一个64KB块(BLOCK)。总结一下,在SPI FLASH中,一个块包含1个或多个扇区,一个扇区又包含
26、多个页,而页是编程的最小单位,但是擦除操作是以块为单位的。当读者使用不同的器件的时候,要阅读这些器件的数据手册。控制和状态寄存器要对SPI FLASH进行擦除、编程、设置等操作,就要编程读写其控制和状态寄存器。对于W25Q64而言,控制和状态寄存器有SR1和SR2,其中SR2仅有最低位有效。表3W25Q64控制和状态寄存器寄存器位名称功能描述SR2S8SRP1保护方法,与WEL组合可以配置为5种保护方式SR1S7SRP0S6SEC决定是以4KB块还是以64KB的块来进行保护。SEC默认值是0,以64KB 的块来进行保护。 S5TB顶部/底部块保护TB控制BP是从顶部开始还是底部开始。TB=0,
27、从顶部开始,TB=1 从底部开始。 S4BP2写这些位可以进行相应的写保护控制,读这些位可以知道当前块保护的状态。可以保护整个芯片或者一部分,或不保护。 默认不保护S3BP1S2BP0S1WELWEL位当执行完写使能的时候置1。当芯片被写禁止的时候清 0。也就是标志着芯片是否可写。 S0BUSY忙标志当要向SPI FLASH的指定地址写数据的时候,首先要选中该芯片,然后透过SPI接口向控制和状态寄存器中写写使能指令,接着通过SPI接口接收或发送数据。当执行一个操作后,可以通过BUSY的状态判断SPI FLASH是否完成了这个操作。例如,擦除整个芯片是个非常费时的操作,可以间隔一段时间读取BUS
28、Y位的状态来判断是否擦除完成。三实验内容1.编写SPI驱动程序2.初始化SPI接口3.读取SPIFLASH的ID,如果正确继续,否则报错4.向SPIFALSH地址0x12AB00开始写一串字符,再读出比较判断是否与写入的一致5.向SPIFALSH地址0x12AB00开始写连续256个字节的0x5A,然后读出并发送给串口,通过串口调试助手判别是否读到的都是0x5A.实验原理根据教材。四实验设备硬件部分:PC计算机(宿主机)、亮点STM32实验板、JLINK。软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件、串口调试助手。五实验步骤1参考SPI及SPI FLASH部分,编写SP
29、I及SPI FLASH驱动程序。2编写主程序3编译代码,使用JLINK或ISP下载到实验板4记录实验过程,撰写实验报告实验七 TF卡编程实验一实验简介编程实现通过SPI接口对TF卡进行读写操作。二实验目的及原理巩固SPI编程,学会对的TF卡读写操作。原理:详细内容参考教材基于STM32的嵌入式系统原理与设计TF卡即MicroSD卡,其体积比SD卡更小,目前广泛应用在嵌入式领域,具有体积小、速度快、存储容量大的优点。最典型的应用是手机,通过TF卡来扩展存储容量。目前市面上的TF卡容量大都在8G以上的。在第二章,设计了TF卡的接口,将TF卡插入板子上的TF卡插槽,即可对其进行编程操作。TF卡可以采
30、用SPI接口,本实验的内容是编写程序实现使用SPI接口对TF卡进行编程。将卡的重要操作的流程列出如下:1.卡的初始化流程: 1)初始化SPI,将SPI设置为低速模式。2) 发送至少74个周期的脉冲给TF卡。因主机上电后,所有SD 卡进入Idle 状态。至少74 个时钟周期后才能开始总线传输。3)设置CS为低,发送命令CMD0,直到得到0X01的响应信息,一直得不到则返回错误信息。4)发送CMD8,获取电压信息,查看是否为2.7到3.3,如不是则错误,返回错误信息。5)发送CMD55,然后发送ACMD41,进行初始化。若超时了仍不成功则返回错误信息,否则返回0。2.读卡流程读单块流程为1)发送CMD17,收到0x00表示成功2)连续读直到读到开始字节0xFE3)读512个字节 4)读两个CRC伪CRC字节(0xFF)读多块方法: 1)发送CMD18读,收到0x00表示成功 2)连续读直到读到开始字节0xFE 3)读512字节 4)读两个CRC字节 5)如果还想读下一扇区,重复2-4 6)发送CMD12来停止读多块操作3.写卡流程写单块方法: 1)发送CMD24,收到0x00表示成功 2)发送时钟,直到收到0xFF 3).发送写单块开始字节0xFE
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1