当前位置:文档之家› STM32 实验27 USB读卡器

STM32 实验27 USB读卡器

STM32 实验27 USB读卡器
STM32 实验27 USB读卡器

基于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.doczj.com/doc/ed7122647.html,ART_BaudRate = 115200; // 1200; USART_https://www.doczj.com/doc/ed7122647.html,ART_WordLength = USART_WordLength_8b; USART_https://www.doczj.com/doc/ed7122647.html,ART_StopBits = USART_StopBits_1; USART_https://www.doczj.com/doc/ed7122647.html,ART_Parity = USART_Parity_No; //USART_Parity_Even; USART_https://www.doczj.com/doc/ed7122647.html,ART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_https://www.doczj.com/doc/ed7122647.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.doczj.com/doc/ed7122647.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.doczj.com/doc/ed7122647.html,/

图一:功能原理图 https://www.doczj.com/doc/ed7122647.html,/item.htm?spm=a1z10.1-c.w4004-9605616956.6.v1FXtM&id=43719925208二、全功能STM32工控系统板原理图解析: 2.1按键与LED电路: 深圳轩微胜电子科技STM32全功能工控板最小系统板https://www.doczj.com/doc/ed7122647.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.doczj.com/doc/ed7122647.html,ART_BaudRate = bound;//一般设置为9600; USART_https://www.doczj.com/doc/ed7122647.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实验

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