基于STM32的嵌入式系统设计实验_实验指导书

基于STM32的嵌入式系统设计实验_实验指导书
基于STM32的嵌入式系统设计实验_实验指导书

实验指导书

(实验)课程名称:基于STM32的嵌入式系统设计实验

电子科技大学教务处制表

实验一 电路板焊接与调试

一.实验简介

完成实验板上部分元件的焊接,焊接完成后进行基本测试。

二.实验目的及原理

掌握STM32F103实验板的基本原理,掌握焊接电路板的基本技能,掌握下载测试程序的基本方法。

原理:详细内容参考教材《基于STM32的嵌入式系统原理与设计》 MCU 和周边电路

如图为MCU 及其周边电路。

图1 MCU 及其周边电路

3.启动配置

2.复位电路

1.唤醒电路

4.高速晶振电路

7.AD 输入

8.低速晶

振电路

5.AD 参考 电路

6.后备电池

1.唤醒电路,高有效,不按时接220K电阻下拉。

2.复位电路,低有效。带RC启动复位。

3.配置启动,用跳线选择BOOT1和BOOT0接高电平或低电平。

4.高速晶振电路,采用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,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为写保护,不保护的时候接地。SCL为I2C时钟,SDA为I2C数据,因开漏输出,需外部接上拉电阻上拉。

三.实验内容

学习STM32F103实验板电路的原理图

焊接电路板上部分电阻电容

焊接LED和蜂鸣器

焊接ASM1117芯片IIC芯片AT24C02

下载测试代码到焊接好的STM32实验板,测试实验板是否工作正常。

实验原理根据教材。

四.实验设备

硬件部分:PC计算机(宿主机)、STM32实验板、电烙铁

软件部分:测试软件(源代码)、ISP下载软件

五.实验步骤

1.焊接电路板部分电阻电容

2.焊接LED和蜂鸣器

3.焊接ASM1117芯片IIC芯片AT24C02

4.焊接晶振

5.检查和清洁实验板。注意需在测试前检查电源与地之间是否短路才能进入下一步。

6.下载测试代码到焊接好的电路板,测试焊接是否正确。测试过程通过串口调试助手输出测试信息,依次测试串口、LED、按键、蜂鸣器、IIC和SPIFLSH的工作情况。

7.如测试不通过,根据现象检查电路,找到问题后进行修正,然后重新测试。

实验二流水灯和按键实验

一.实验简介

从无到有构建第一个STM32工程,并实现流水灯效果和按键响应。

二.实验目的及原理

掌握STM32开发环境,掌握从无到有的构建工程,学会GPIO基本操作。

原理:详细内容参考教材《基于STM32的嵌入式系统原理与设计》

输入输出端口GPIO

GPIO是常规输入输出端口,STM32F103VE有PA、PB、PC、PD、PE共5个16位的GPIO。STM32的GPIO都是可编程的,具有很多复用功能。从图1.7.1可见,通过对输出控及肖特基触发器及各个开关的控制,可以选择使用GPIO功能或复用功能。当听过编程,将输出控制设置为选择复用功能的时候,就从来自片上外设的复用功能输出端采集数据,反之采集输出数据寄存器上的数据。在GPIO方式下也可以配置为很多种模式,这和51单片机是有明显的区别,功能性强了很多。这些模式有:

输入浮空、输入上拉、输入下拉、模拟输入、开漏输入、推挽输出、推挽复用、开漏复用。在默认的模式下为输入浮空。

每个I/O端口可以通过对GPIO寄存器写操作来编程成一种模式,GPIO寄存器包括端口配置低寄存器GPIOx_CRL、端口配置高寄存器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资源管理器。这个目录可以放在任何一个盘或目录里,没有限制。

现在开始拷贝文件。

1)拷贝内核文件和驱动支持文件、启动文件

将固件库Libraries\CMSIS\CM3\CoreSupport目录下的两个文件core_cm3.c和core_cm3.h文件拷贝到刚刚创建的stm32lib\m3子目录中。

将固件库Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x目录下的stm32f10x.h、system_stm32f10x.c、system_stm32f10x.h也拷贝到stm32lib\m3子目录中。

将Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm下的启动代码也拷贝到application子目录中。启动文件有好几个,笔者的STM32硬件芯片是STM32F103VET6,是属于高密度的芯片,因此应该拷贝startup_stm32f10x_hd.s。启动开发,启动文件startup_stm32f10x_hd.s是程序开始的地方。

2)接下来拷贝设备驱动程序。

将Libraries\STM32F10x_StdPeriph_Driver\inc目录下的所有文件拷贝到stm32lib\inc目录下。

将Libraries\STM32F10x_StdPeriph_Driver\src目录下的所有文件拷贝到stm32lib\src目录下。

3)拷贝外设中断函数文件和固件库配置文件

拷贝固件库的Project\ STM32F10x_StdPeriph_Templat目录下的文件stm32f10x_it.h、stm32f10x_it.c和stm32f10x_conf.h文件到application子目录中。

三.实验内容

熟悉MDK KEIL开发环境,构建基于固件库的工程,编写代码实现流水灯工程,按键后能改变流水灯速度。通过ISP下载代码到实验板,查看运行结果。使用JLINK下载代码到目标板,查看运行结果,使用JLINK在线调试。

实验原理根据教材。

四.实验设备

硬件部分:PC计算机(宿主机)、亮点STM32实验板、JLINK。

软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件。

五.实验步骤

1.熟悉MDK KEIL开发环境

2.熟悉串口编程软件ISP

3.查看固件库结构和文件

4.建立工程目录,复制库文件

5.建立和配置工程

6.编写代码

7.编译代码

8.使用ISP下载到实验板

9.测试运行结果

10.使用JLINK下载到实验板

11.单步调试

12.记录实验过程,撰写实验报告

实验三串口发送和接收实验

一.实验简介

编写代码实现串口发送和接收,将通过串口发送来的数据回送回去。

二.实验目的

掌握STM32基本串口编程,进一步学习中断处理。

原理:详细内容参考教材《基于STM32的嵌入式系统原理与设计》

STM32的同步异步收发器USART和传统的51单片机或PC即串行口UART稍有区别:通用同步异步收发器(USART)提供了一种灵活的方法与使用异步串行数据格式的外部设备之间进行全双工数据交换。USART利用分数波特率发生器提供宽范围的波特率选择。另外,它还允许多处理器通信。 USART也可以使用DMA方式直接将接收的数据存储到内存或从内存中批量发送数据,也支持多种中断方式。

接口通过三个引脚与其他设备连接在一起。接收数据输入(RX)和发送数据输出(TX)及地(GND)。如果使用更复杂的功能,如硬件流控制的时候,需要更多的引脚。

RX:接收数据串行输入。

TX:发送数据输出。

串行异步通信USART库函数

串行通信库函数在"stm32f10x_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节点的地址

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_SetPrescaler 设置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中断发生与否

USART_ClearITPendingBit 清除USARTx的中断待处理位

三.实验内容

编写主程序,初始化串口1,设置波特率为9600,无校验,数据位8位,停止位1位。编写中断服务程序代码实现将发送过来的数据回送。

四.实验设备

硬件部分:PC计算机(宿主机)、亮点STM32实验板、JLINK、示波器。

软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件、串口调试助手。

五.实验步骤

1编写串口初始化代码

2编写中断服务程序代码

3编译代码,使用JLINK或ISP下载到实验板

4记录实验过程,撰写实验报告

实验四串口DMA双缓冲实验

一.实验简介

使用双缓冲区,同时进行串口数据接收和数据处理。

二.实验目的及原理

进一步掌握串口编程,进一步学习DMA编程。学习使用双缓冲兵乓操作,理解互斥资源。进一步学习使用DMA和中断,提高编程能力。

原理:详细内容参考教材《基于STM32的嵌入式系统原理与设计》

直接存储器存取(DMA)用来提供在外设和存储器之间或者存储器和存储器之间的高速的无需CPU干预的数据传输。数据通过DMA快速地移动,例如从串口到内存,当在内存中收到一定数量的数据时才发出一个中断,CPU才放下手头的工作去处理,这就节省了CPU 的资源来做其他操作。 STM32有两个DMA控制器,其中DMA1有7个通道,DMA2有5个通道,每个通道专门用来管理来自于一个或多个外设对存储器访问的请求。另外,还有一个仲裁器来协调各个DMA请求的优先权。

STM32在硬件上设计了这么多的DMA通道是煞费苦心的,用好DMA控制器,可以大大的提高系统的吞吐量。在PC机上,将硬盘数据复制到内存,就采用DMA模式,把拷贝数据的任务交给DMA来执行,CPU就可以去做别的事情了。在STM32下也是如此,在编程中不采用DMA模式,全靠CPU去辛苦劳作,是巨大的损失。

要使用好DMA控制器,首先要了解它。

DMA框图

STM32有一大堆的可以使用DMA与内存进行直接交互的外设,但是只有2个DMA控制器。这就导致,当外设要进行DMA传输的时候,首先要获得批准。当然,哪几个外设可以使用哪些通道,是预先就设计好了的,在使用哪个通道的问题上就不需要过多考虑,但是编程人员必须认真对待这个问题,否则DMA传输就用不起来。

DMA传输可以从内存到外设,也可以从外设到内存,另外,内存到内存的DMA传输也是允许的,这个很方便。大部分的外设是APB外设,但是,也有两个AHB外设,以太网和USB可以参加,它们很需要高速的DMA传输!

DMA传输要申请,有申请就得成立一个总裁机构,于是,两个DMA控制器都设立了仲裁委员会。

获得了批准的设备就可以在DMA控制器的控制下,和内存进行数据交换,但是数据传输的方向在批准的时候就要填写进申请表,还有一些其他的参数也要仔细填写进去(如传输的数据量,是按字传输还是半字、字节传输等,传输完成后是否发中断等),批准后就严格按申请表的内容进行数据传输。

当然,和一般的协议一样,还有附加条款:当主人CPU需要访问SRAM的时候,DMA 请求会暂停CPU访问系统总线达若干个周期,总线仲裁器执行循环调度,以保证CPU至少可以得到一半的系统总线(存储器或外设)带宽。另外,可编程的数据传输数目最大为65535。

三.实验内容

假设,有一个设备用RS232串行口以256000的波特率发送数据,并且大概每80毫秒发送8个字节的数据。使用串口调试助手,仿真这个设备。

要求将该设备发送的数据求平均值后送回。

采用DMA方式接收数据,接收完成后发生中断,然后DMA通道使用另一个缓冲区继续接收数据。而这时CPU可以处理数据,计算刚接收到数据的平均值。然后送回。这样,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是电可擦除PROM,即EEPROM,其容量是256 X 8bit,,即2K bits。24C02接口方式为两线I2C接口。其总线时序如图:

图124C02总线时序

由图可见, 24C02的读写时序完全采用I2C方式,因此,既然已经实现了I2C驱动函数,就可以调用这些函数来实现24C02的驱动。寻址24C02,它的地址应该是什么呢?

图2 24C02地址格式

因为在STM32实验板上,将A2\A1\A0接地,那么A2,A1,A0三位都为0。最低位LSB 为读写操作位,读为高电平,写为低电平。因此,写地址为0XA0,读地址为0XA1。如果有多个24C02,那么应该将A2A1A0连接到不同的电平,让它们的地址不同,这样就可以分别访问。

在写操作的时候,首先给出启动条件,然后向24C02发送器件地址,被寻址的24C02会应答。在接收应答成功后,再发送8位的字地址。24C02接收到这个地址后,会产生应答, 接收到这个应答后可以发送8位的数据。在接收到8位的数据后EEPROM又会应答,这时必须给出停止条件来结束。

在进行读操作的时候,流程基本相同,但需要在发送了器件地址和字地址,接收到应答后,开始读之前,发送一个启动条件再发送一个写地址给器件。

三.实验内容

编写I2C驱动程序,使用驱动程序初始化EPC02,判断设备正确性。

写256个0x5A到EPC02,读出并发送给串口,通过串口调试助手判别是否读到的都是0x5A.

四.实验设备

硬件部分: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有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个或多个扇区,一个扇区又包含多个页,而页是编程的最小单位,但是擦除操作是以块为单位的。当读者使用不同的器件的时候,要阅读这些器件的数据手册。 控制和状态寄存器

要对SPI FLASH 进行擦除、编程、设置等操作,就要编程读写其控制和状态寄存器。对于W25Q64而言,控制和状态寄存器有SR1和SR2,其中SR2仅有最低位有效。

表3W25Q64控制和状态寄存器

寄存器 位 名称 功能描述

SR2 S8 SRP1 保护方法,与WEL 组合可以配置为5种保护方式

SR1

S7 SRP0 S6 SEC 决定是以4KB 块还是以64KB 的块来进行保护。SEC 默认

值是0,以64KB 的块来进行保护。

S5 TB 顶部/底部块保护TB 控制BP 是从顶部开始还是底部开始。TB=0,从顶部开始,TB=1 从底部开始。 S4 BP2 写这些位可以进行相应的写保护控制,读这些位可以知道当前块保护的状态。可以保护整个芯片或者一部分,或不保护。 默认不保护

S3 BP1 S2 BP0 S1 WEL WEL 位当执行完写使能的时候置1。当芯片被写禁止的时候清 0。也就是标志着芯片是否可写。 S0

BUSY

忙标志

当要向SPI FLASH 的指定地址写数据的时候,首先要选中该芯片,然后透过SPI 接口向控制和状态寄存器中写写使能指令,接着通过SPI 接口接收或发送数据。

当执行一个操作后,可以通过BUSY 的状态判断SPI FLASH 是否完成了这个操作。例如,擦除整个芯片是个非常费时的操作,可以间隔一段时间读取BUSY 位的状态来判断是否擦除完成。

三.实验内容

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部分,编写SPI及SPI FLASH驱动程序。

2编写主程序

3编译代码,使用JLINK或ISP下载到实验板

4记录实验过程,撰写实验报告

实验七TF卡编程实验

一.实验简介

编程实现通过SPI接口对TF卡进行读写操作。

二.实验目的及原理

巩固SPI编程,学会对的TF卡读写操作。

原理:详细内容参考教材《基于STM32的嵌入式系统原理与设计》

TF卡即MicroSD卡,其体积比SD卡更小,目前广泛应用在嵌入式领域,具有体积小、速度快、存储容量大的优点。最典型的应用是手机,通过TF卡来扩展存储容量。目前市面上的TF卡容量大都在8G以上的。在第二章,设计了TF卡的接口,将TF卡插入板子上的TF卡插槽,即可对其进行编程操作。TF卡可以采用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)连续读直到读到开始字节0xFE

3)读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

4).发送512个字节数据

5).发送2字节伪CRC 0xFF

6)发送0XFF,如果读到XXX00101表示数据写入成功写多块方法:

1)发送CMD25,收到0x00表示成功

2)发送时钟, 直到收到0xFF

3)发送写多块开始字节0xFC

4)发送512字节数据

5)发送两个CRC 0xFF

6)发送0xFF,读到XXX00101表示数据写入成功

7)判断是否读完所有的块,若未读完转到2)步骤

8)发送写多块停止字节0xFD来停止写操作

9)进行忙检测直到读到0xFF

三.实验内容

1.编写TF卡驱动程序(参考教材TF卡部分)

2.TF卡检测,检测不到提示

3.写卡上地5个扇区,写512个0x0a

4.读卡上低5个扇区,将读取内容发送到串口,判断是不是512个0x0a 四.实验设备

硬件部分:PC计算机(宿主机)、亮点STM32实验板、JLINK。

软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件、串口调试助手。五.实验步骤

1编写TF卡驱动程序(可参考书上代码)。

2编写主程序

3编译代码,使用JLINK或ISP下载到实验板

4记录实验过程,撰写实验报告

基于STM32F103嵌入式实验指导书

实验一、STM32的开发环境与简单工程 一、实验目的 1、熟悉STM32开发板的开发环境; 2、熟悉MDK创建和配置STM32工程项目的基本流程; 3、熟悉STM32官方库的应用; 4、规范编程格式。 二、实验内容 本次实验配置MDK集成开发环境,新建一个简单的工程文件,添加STM32官方库并配置工程,编译运行这个工程文件。下载已经编译好的文件到开发板中运行。学会在程序中设置断点,观察系统内存和变量,为调试应用程序打下基础。 三、预备知识 基本单片机硬件知识、单片机软件编程语言、程序创建和调试的基本方法。 四、实验设备及工具 硬件:STM32开发平台 软件:STM32官方库;PC机操作系统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用于存放我们自己编写的代码文件(含自己移植的底层驱动),还有MDK工程; LIB存放所有的官方底层驱动库文件; OBJ用于工程输出的过程文件和最终的二进制文件。 图1

2、将官方库STM32F10x_StdPeriph_Lib_V3.5.0.rar解压。 1)把STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport下的所有文件和STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x 下的所有文件都到第一步所创建的CMSIS文件夹中; 2)把STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver目录下的文件(目录inc和scr)复制到第一步创建的LIB文件夹中; 3)把STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template目录下的stm32f10x_conf.h、stm32f10x_it.c、stm32f10x_it.h三个文件复制到USER文件夹中。 3、打开MDK软件,新建一个工程Proj_GPIO保存到Proj_GPIO/USER中。CPU选择STM32F103ZE,如图2; 图2 4、新建一个空文档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_HD, USE_STDPERIPH_DRIVER系统的两个基 本宏定义;配置Include Paths属性,加入工 程中包含头文件的目录;如右图

单片机STM32实验报告

实验报告 课程名称:单片微机原理与车载系统 学生姓名蒋昭立 班级电科1601 学号16401700119 指导教师易吉良 成绩 2018年12月17日

实验1 GPIO实验 1.1 实验目的 1)熟悉MDK开发环境; 2)掌握STM32单片机的GPIO使用方法。 1.2 实验设备 1)一台装有Keil和串口调试软件的计算机; 2)一套STM32F103开发板; 3)STlink硬件仿真器。 1.3基本实验内容 1)熟悉MDK开发环境,参考《STM32F1开发指南(精英版)-寄存器版本_V1.0》第3章,安装MDK 并新建test工程,运行例程,在串口窗宽观察结果,并记录如下: 从图片可以看出,例程运行成功,没有错误。 2)按键输入实验,《STM32F1开发指南(精英版)-寄存器版本_V1.0》第8章。实现功能:3 个按钮(KEY_UP、KEY0和KEY1),来控制板上的2 个LED(DS0 和DS1)和蜂鸣器,其中KEY_UP 控制蜂鸣器,按一次叫,再按一次停;KEY1 控制DS1,按一次亮,再按一次灭;KEY0 则同时控制DS0 和DS1,按一次,他们的状态就翻转一次。 理解连续按概念及其实现代码。参数mode 为0 的时候,KEY_Scan 函数将不支持连续按,扫描某个按键,该按键按下之后必须要松开,才能第二次触发,否则不会再响应这个按键,这样的好处就是可以防止按一次多次触发,而坏处就是在需要长按的时候比较不合适。当mode 为1 的时候,KEY_Scan 函数将支持连续按,如果某个按键一直按下,则会一直返回这个按键的键值,这样可以方便的实现长按检测。 寄存器方法实现不支持连续按的关键代码,以及程序运行后的效果。

(完整word版)STM32的485最简单例程

485最基本的半双工通信配置 采用STM32F103ZET6串口3连接485芯片通信口,485芯片的A,B通过485转串口模块与电脑相连,完成在串口软件上输入输出功能。 串口3,配置函数: void USART3_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE); // USART3_TX -> PB10 , USART3_RX ->PB11 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); USART_https://www.360docs.net/doc/fd5452959.html,ART_BaudRate = 115200; // 1200; USART_https://www.360docs.net/doc/fd5452959.html,ART_WordLength = USART_WordLength_8b; USART_https://www.360docs.net/doc/fd5452959.html,ART_StopBits = USART_StopBits_1; USART_https://www.360docs.net/doc/fd5452959.html,ART_Parity = USART_Parity_No; //USART_Parity_Even; USART_https://www.360docs.net/doc/fd5452959.html,ART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_https://www.360docs.net/doc/fd5452959.html,ART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART3, &USART_InitStructure); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); #ifdef PDU_USART3_DMA

RS-485总线收发实验要点

RS-485总线收发实验 在本章节,我们将介绍RS-485总线的使用。本实验一共需要两块神舟IV号STM32开发板,一块作为RS485的发送端,另一块作为RS485的接收端,接收总线上的数据。本节分为 如下几个部分: 1 RS-485总线实验的意义与作用 2实验原理 3软件设计 4硬件设计 5下载与验证 6实验现象 意义与作用 前面两个例程,我们分别讲解了串口printf实验和串口中断收发实验,对RS232串口原理及其应用有了一定的了解,但是由于RS232接口标准出现较早,难免有不足之处,主要有以 下四点: (1)接口的信号电平值较高,易损坏接口电路的芯片,又因为与TTL电平不兼容故需使用电平转换电路方能与TTL电路连接。 (2)传输速率较低,在异步传输时,波特率为20Kbps。 (3)接口使用一根信号线和一根信号返回线而构成共地的传输形式,这种共地传输容易产生共模干扰,所以抗噪声干扰性弱。 (4)传输距离有限,最大传输距离标准值为50英尺,实际上也只能用在50米左右。 针对RS232接口的不足,于是就不断出现了一些新的接口标准,RS-485就是其中之一, 它具有以下特点: (1)RS-485的电气特性:逻辑"1"以两线间的电压差为+(2—6)V表示;逻辑"0"以两线间的电压差为-(2—6)V表示。接口信号电平比RS-232降低了,就不易损坏接口电 路的芯片,且该电平与TTL电平兼容,可方便与TTL电路连接。 (2)RS-485的数据最高传输速率为10Mbps(实际取决于RS485接口芯片和电路)。(3)RS-485接口是采用平衡驱动器和差分接收器的组合,抗共模干能力增强,即抗噪声干扰性好。 (4)RS-485接口的最大传输距离标准值为4000英尺,实际上可达3000米,另外RS-232接口在总线上只允许连接1个收发器,即单站能力。而RS-485接口在总线上是允许连 接多达128个收发器。即具有多站能力,这样用户可以利用单一的RS-485接口方便地 建立起设备网络。 (5)因为RS485接口组成的半双工网络,一般只需二根连线(我们一般叫AB线),所以RS485接口均采用屏蔽双绞线传输。 基于以上原因,RS485总线在工业控制行业应用非常广泛,适合分散的,远距离(上千米)的多点通信,这是RS232所不能实现的,因此,通过使用STM32开发板实现RS485的通信,我们可以了解RS485总线的应用和基本原理,搭建RS485通信网络。 实验原理 RS-485总线简介

第25讲 485通信实验

7.1RS-485总线收发实验 7.1.1485简介 485(一般称作RS485/EIA-485)是隶属于OSI(OSI:开放系统互连基本参考模型。开放,是指非垄断的。系统是指现实的系统中与互联有关的各部分。)模型物理层的电气特性规定为2线,半双工,多点通信的标准。它的电气特性和RS-232大不一样。用缆线两端的电压差值来表示传递信号。RS485仅仅规定了接受端和发送端的电气特性。它没有规定或推荐任何数据协议。 RS-232在1962年发布,命名为EIA-232-E,作为工业标准,以保证不同厂家产品之间的兼容。RS-422由RS-232发展而来,它是为弥补RS-232之不足而提出的。为改进RS-232通信距离短、速率低的缺点,RS-422定义了一种平衡通信接口,将传输速率提高到10Mb/s,传输距离延长到4000英尺(速率低于100kb/s时),并允许在一条平衡总线上连接最多10个接收器。RS-422是一种单机发送、多机接收的单向、平衡传输规范,被命名为TIA/EIA-422-A 标准。为扩展应用范围,EIA又于1983年在RS-422基础上制定了RS-485标准,增加了多点、双向通信能力,即允许多个发送器连接到同一条总线上,同时增加了发送器的驱动能力和冲突保护特性,扩展了总线共模范围,后命名为TIA/EIA-485-A标准。 RS485的特点包括: 1)接口电平低,不易损坏芯片。RS485的电气特性:逻辑“1”以两线间的电压差为+(2~6)V 表示;逻辑“0”以两线间的电压差为-(2~6)V表示。接口信号电平比RS232降低了,不易损坏接口电路的芯片,且该电平与TTL电平兼容,可方便与TTL 电路连接。 2)传输速率高。10米时,RS485的数据最高传输速率可达35Mbps,在1200m时,传输速度可达100Kbps。 3)抗干扰能力强。RS485接口是采用平衡驱动器和差分接收器的组合,抗共模干扰能力增强,即抗噪声干扰性好。 4)传输距离远,支持节点多。RS485总线最长可以传输1200m以上(速率≤100Kbps)一般最大支持32个节点,如果使用特制的485芯片,可以达到128个或者256个节点,最大的可以支持到400个节点。 7.1.2RS485的通信概念 RS-485 是一个电气接口规范它只规定了平衡驱动器和接收器的电特性而没有规定接 插件传输电缆和通信协议。 RS-485建议性标准作为一种多点差分数据传输的电气规范,现已成为业界应用最为广泛的标准通信接口之一,这种通信接口允许在简单的一对双绞线上进行多点双向通信,它所具有的噪声抑制能力、数据传输速率、电缆长度及可靠性是其他标准无法比拟的,因此许多不同领域都采用RS-485作为数据传输链路,它是一种极为经济并具有相当高的噪声抑制、传输速率、传输距离和宽共模范围的通信平台。 RS-485是一种在工业上作为数据交换的手段而广泛使用的串行通信方式,数据信号采用差分传输方式,也称作平衡传输,因此具有较强的抗干扰能力。它使用一对双绞线,将其中一线定义为A,另一线定义为B。如下图所示:

智嵌 STM32F407开发板基本型V1.0实验例程操作手册

北京智嵌物联网电子技术有限公司 I 智嵌 STM32F407开发板基本型V1.0实验例程操作手册 版本号:A 拟制人:赵工 时 间 :2014年12月27日

目录 1本文档编写目的 (1) 2实验例程操作说明 (1) 2.1LED闪烁实验 (1) 2.2KEY_LED实验 (1) 2.3RS232通讯实验 (1) 2.4RS485通讯实验 (2) 2.5CAN1通讯实验 (3) 2.6I2C实验—读写24c04 (3) 2.7SPI通讯实验--读写SST25016B (5) 2.8CPU温度测量实验 (5) 2.9CRC实验 (5) 2.10DAC例程实验 (6) 2.11DS18B20温度测量实验 (6) 2.12EXIT例程实验 (6) 2.13RNG随机数发生器例程实验 (7) 2.14RTC时钟例程实验 (7) 2.15独立看门狗例程实验 (8) 2.1616通道ADC采集实验 (9) 2.17U盘读写实验 (10) 2.18SD卡FatFS文件系统实验 (11) 2.19USB数据存储实验-PC机通过USB读写SD卡实验 (13) 2.20基于OLED的RFID_RC522读写IC卡实验 (14) 2.21OLED显示实验 (16) 2.22TCP服务器收发数据实验 (16) 2.23动态IP实验 (18) 2.24HTTP网页服务器实验 (20) 2.25 2.4G无线模块NRF24l01通信实验 (22) 2.26SNTP协议实验_网络授时_RTC实验 (22) 2.27UDP客户端发送数据实验 (26) 2.28UDP服务器收发数据实验 (27) 2.29TCP客户端收发数据实验 (29) 2.30HTTP网页拍照例程 (32) 2.31其他实验例程 (33)

stm32实验485实验

#include "sys.h" #include "usart.h" #include "delay.h" #include "led.h" #include "beep.h" #include "key.h" #include "exti.h" #include "wdg.h" #include "timer.h" #include "tpad.h" #include "oled.h" #include "lcd.h" #include "usmart.h" #include "rtc.h" #include "wkup.h" #include "adc.h" #include "dac.h" #include "dma.h" #include "24cxx.h" #include "flash.h" #include "rs485.h" int main(void) { u8 key; u8 i=0,t=0; u8 cnt=0; u8 rs485buf[5]; Stm32_Clock_Init(9); //系统时钟设置 uart_init(72,9600); //串口初始化为9600 delay_init(72); //延时初始化 LED_Init(); //初始化与LED连接的硬件接口 LCD_Init(); //初始化LCD usmart_dev.init(72); //初始化USMART KEY_Init(); //按键初始化 RS485_Init(36,9600); //初始化RS485 POINT_COLOR=RED;//设置字体为红色 LCD_ShowString(60,50,200,16,16,"WarShip STM32"); LCD_ShowString(60,70,200,16,16,"RS485 TEST"); LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK"); LCD_ShowString(60,110,200,16,16,"2012/9/9"); LCD_ShowString(60,130,200,16,16,"KEY0:Send"); //显示提示信息

STM32 带can通讯 485 串口 232串口通讯 中文件资料 最小系统说明书

深圳轩微胜电子科技 STM32全功能工控板 最小系统板 https://www.360docs.net/doc/fd5452959.html,/ STM32F103C8T6最小系统带CAN 485 232 说明书 目 录: 1、全功能STM32工控系统板最小系统板功能介绍 2、全功能STM32工控系统板最小系统板原理图解析 3、全功能STM32工控系统板最小系统板配套资料 4、can 程序设计源代码 和485程序设计源代码 5、总结 6、公司信息

一、全功能STM32工控系统板介绍: STM32最小系统板主要协助广大工程师与学生在产品调试、新产品开发,样机测试,参加大赛、毕业设计等领域的应用和开发,全功能STM32 工控系统板最小系统板的主要特点有: 1、全功能通信系统:集成CAN通讯,485通讯,232串口通讯 于一身,方便各种通信的切换使用。 2、标准下载口:国际标准的Jlink下载口,同时兼容通信程 序下载,便捷可靠。 3、宽电源接口:适应工控需求的电源,无论在什么系统上应 用,系统自动识别电源进行调整,不需要外接电源,方便应用。 4、工业应用级布线,采用多层板设计,公共电源和地完全隔 离,加大了过载能力,抗干扰能力强。 5、体积小,方便安装应用 6、跳帽设计,方便多重状态组合 深圳轩微胜电子科技STM32全功能工控板最小系统板https://www.360docs.net/doc/fd5452959.html,/

图一:功能原理图 https://www.360docs.net/doc/fd5452959.html,/item.htm?spm=a1z10.1-c.w4004-9605616956.6.v1FXtM&id=43719925208二、全功能STM32工控系统板原理图解析: 2.1按键与LED电路: 深圳轩微胜电子科技STM32全功能工控板最小系统板https://www.360docs.net/doc/fd5452959.html,/

stm32实验CAN收发实验

#include "sys.h" #include "usart.h" #include "delay.h" #include "led.h" #include "beep.h" #include "key.h" #include "exti.h" #include "wdg.h" #include "timer.h" #include "tpad.h" #include "oled.h" #include "lcd.h" #include "usmart.h" #include "rtc.h" #include "wkup.h" #include "adc.h" #include "dac.h" #include "dma.h" #include "24cxx.h" #include "flash.h" #include "rs485.h"

#include "can.h" int main(void){u8 key; u8 i=0,t=0; u8 canbuf[8]; u8 res; 息u8 mode=1;//CAN工作模式;0,普通模式;1,环回模式 Stm32_Clock_Init (9); //系统时钟设置 uart_init(72,9600); delay_init (72); LED_Init(); LCD_Init();//串口初始化为9600 //xx初始化 //初始化与LED连接的硬件接口//初始化LCD usmart_dev.init (72);//初始化USMART KEY_Init();//按键初始化 CAN_Mode_Init(1,8,7,5,mode);//CAN初始化,波特率450Kbps POINT_COLOR=RED;//设置字体为红色 LCD_ShowString(60,50,200,16,16,"WarShip STM32");

stm32串口间通信实验

STM32串口间通信 该工程主要实现了两块实验板之间的通信以及接收实验板和PC间的通信,通过发送实验板串口1发送数据,然后由接受实验板串口3接收数据后再又串口1发送出去通过PC查看实验效果。 发送串口及子函数配置: #include "sys.h" #include "usart.h" ////////////////////////////////////////////////////////////////////////////////// char USART_TX_BUF[12]={"0123456789\r\n"}; //发送缓冲 void uart_init(u32 bound) { //GPIO端口设置 GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; //NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA|RCC _APB2Periph_AFIO, ENABLE); //USART1_TX PA.9 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); //USART1_RX PA.10 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOA TING; GPIO_Init(GPIOA, &GPIO_InitStructure); //Usart1 NVIC 配置 //NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; //NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ; //NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; // //NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//IRQ通道使能//NVIC_Init(&NVIC_InitStructure); //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器USART1 //USART 初始化设置 USART_https://www.360docs.net/doc/fd5452959.html,ART_BaudRate = bound;//一般设置为9600; USART_https://www.360docs.net/doc/fd5452959.html,ART_WordLength = USART_WordLength_8b;

stm32实验程序代码

实验1 GPIO #include "" #include "" * Input : None * Output : None * Return : None ******************************************************************************* / int main(void) { /* Configure the system clocks */ * Input : None * Output : None * Return : None ******************************************************************************* / void NVIC_Configuration(void) { NVIC_InitTypeDef NVIC_InitStructure;

/* Configure one bit for preemption priority */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); /* Enable the EXTI9_5 Interrupt */ * Input : None * Output : None * Return : None ******************************************************************************* / void GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; /* Enable GPIOA, GPIOF and AFIO clocks */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOF | RCC_APB2Periph_AFIO, ENABLE); /* Configure PF. as Output push-pull */ = GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GP

第二十九章战舰STM32开发板485实验

第二十九章485 实验 本章我们将向大家介绍如何利用STM32的串口实现485通信(半双工)。在本章中,我们将利用STM32的串口2来实现两块开发板之间的485通信,并将结果显示在TFTLCD模块上。本章分为如下几个部分: 29.1 485 简介 29.2 硬件设计 29.3 软件设计 29.4 下载验证

29.1 485 简介 485(一般称作RS485/EIA-485)是隶属于OSI模型物理层的电气特性规定为2线,半双工,多点通信的标准。它的电气特性和RS-232大不一样。用缆线两端的电压差值来表示传递信号。RS485仅仅规定了接受端和发送端的电气特性。它没有规定或推荐任何数据协议。 RS485的特点包括: 1)接口电平低,不易损坏芯片。RS485的电气特性:逻辑“1”以两线间的电压差为+(2~6)V 表示;逻辑“0”以两线间的电压差为-(2~6)V表示。接口信号电平比RS232降低了, 不易损坏接口电路的芯片,且该电平与TTL电平兼容,可方便与TTL 电路连接。 2)传输速率高。10米时,RS485的数据最高传输速率可达35Mbps,在1200m时,传输速度可达100Kbps。 3)抗干扰能力强。RS485接口是采用平衡驱动器和差分接收器的组合,抗共模干扰能力增强,即抗噪声干扰性好。 4)传输距离远,支持节点多。RS485总线最长可以传输1200m以上(速率≤100Kbps)一般最大支持32个节点,如果使用特制的485芯片,可以达到128个或者256个节点,最大的可以支持到400个节点。 RS485推荐使用在点对点网络中,线型,总线型,不能是星型,环型网络。理想情况下RS485需要2个匹配电阻,其阻值要求等于传输电缆的特性阻抗(一般为120Ω)。没有特性阻抗的话,当所有的设备都静止或者没有能量的时候就会产生噪声,而且线移需要双端的电压差。没有终接电阻的话,会使得较快速的发送端产生多个数据信号的边缘,导致数据传输出错。485推荐的连接方式如图29.1.2所示: 图29.1.2 RS485连接 在上面的连接中,如果需要添加匹配电阻,我们一般在总线的起止端加入,也就是主机和设备4上面各加一个120Ω的匹配电阻。 由于RS485具有传输距离远、传输速度快、支持节点多和抗干扰能力更强等特点,所以RS485有很广泛的应用。 战舰STM32开发板采用SP3485作为收发器,该芯片支持3.3V供电,最大传输速度可达10Mbps,支持多达32个节点,并且有输出短路保护。该芯片的框图如图29.1.2所示: 图29.1.2 SP3485框图 图中A、B总线接口,用于连接485总线。RO是接收输出端,DI是发送数据收入端,RE 是接收使能信号(低电平有效),DE是发送使能信号(高电平有效)。

STM32的485通讯程序(打印)

#include "main.h" int main(void) { main_init(); while(1) { UART3_MAX3485_Puts("12345"); } } GPIO.C #include "main.h" void Hardware_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; //SPI1 RESET复位GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//50M时钟速度 GPIO_Init(GPIOC, &GPIO_InitStructure); /*--------------485控制端初始化------PB0----------*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //50M时钟速度 GPIO_Init(GPIOB, &GPIO_InitStructure); } INIT.C #include "main.h" void main_init(void) { RCC_ClocksTypeDef RCC_ClockFreq; SystemInit(); RCC_GetClocksFreq(&RCC_ClockFreq); Hardware_GPIO_Init(); Hardware_UART3_MAX3485_Init(); }

stm32下485使用记录

stm32下485使用记录 使用STM32 做为控制器,板上要求有4 个485 接口,一个232 接口,当 232 有数据到达时,按条件转发给485,当485 有数据到达时,无条件转给232 刚开始编写代码时,由于对485 使用不熟悉,不知道该注意哪些,就直接编写 程序:1.配置管脚,这里管脚配置232 与485 是一样的,但485 要用一个管脚 的高低电平控制输入输出方向,这里使用使用4 个管脚对串口2--串口4 控制2. 中断配置,每个串口给与打开对应的中断线,并给与一定的优先级3.串口配置, 这里包含时钟、波特率、8N1 等,并选择使用的中断事件,这里所有串口都选 用接收中断232 配置和485 配置是一样的,无非485 是半双工的,需要控制方 向,还有一个特别注意的地方,也是我记录这个文档的原因:由于硬件是我手 工制作,不确定所用串口都能使用,所以使用循环输出测试是否到pc 的串口 助手,测试结果发现程序一直会进入输入中断,没错是输入中断,发送数据进 入输入中断,后经仔细研究发现问题,代码如下:主函数int main(void){u8 cmd = 0xaa;//配置过程不写了while(1){serial3_putchar(cmd);}}串口接收中断我已 打开,这里不写了串口3 发送字节函数void Serial3PutChar(u8 c){int i;MAX485EN3(); //485 输出控制GPIO_SetBits(GPIOE, GPIO_Pin_15) USART_SendData(USART3, c);while (USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET);MAX485RE3(); //485 输入控制GPIO_ResetBits(GPIOE, GPIO_Pin_15)}串口中断服务子程序void USART3_IRQHandler(void){if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET){Serial1PutChar(Serial3GetChar()); //串口1 发送串口2 接收到的数据USART_ClearITPendingBit(USART2, USART_IT_RXNE);}}后来经过本人查找 资料及反复思量,发现问题是485 发送数据的时间不够,后经修改波特率为

STM32C8T6实验

目录 实验一:流水灯实验 (2) 实验2-普通按键实验 (4) 实验3-外部中断-按键实验 (5) 实验4-ADC实验 (6) 实验5-内部温度传感器实验 (7) 实验6-数码管 (8)

实验一:流水灯实验 开发板LED采用共阳极接法,单片机引脚输出低电平时为亮,高电平时为灭。硬件连接为PA0~PA7依次接LED1~LED8。 1:使用keil5打开程序内流水灯实验程序,开发板链接电脑。

2:将程序内STM32C8T6开发手册\STM32C8T6程序\1-流水灯LED.axf下载单片机,实验现象是LED0~LED8 循环点亮。

实验2-普通按键实验 硬件连接为PB8,PB9,PB10,PB11 为外置独立按键。按下按键,单片机引脚输入低电平。

2:Keil打开STM32C8T6开发手册\STM32C8T6程序\2-普通按键实验\ key.uvprojx。 3:实验现象:按下按键S1,蜂鸣器响,LED1亮。松开不亮。 实验3-外部中断-按键实验 实验3中采用按键S1为外部中断源,按下按键S1,单片机检测到外部中断进入中断函数。 中断函数将当前LED1灯的状态取反后输出。

实验4-ADC实验 1:单片机内部集成片内ADC模块,DMA模块, USART模块。 2:程序中ADC采集ADC12_IN8 即单片机引脚PB0的电压。 3:DMA模块传送ADC转换后的数值。 4:使用PA9 PA10 的USART1 功能,向电脑传递PB0检测到的电压。5:PB0电压变换可以使用杜邦线接外接3.3V 和GND 电平. 6:实验中需要用到串口助手。 7:STM32C8T6开发手册\STM32C8T6程序\4-ADC实验

相关主题
相关文档
最新文档