打印
[STM32F1]

STM32F107VC金龙开发板 第六章--内部温度

[复制链接]
3588|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 szopenmcu 于 2015-4-22 17:42 编辑

第六章 金龙107——内部温度

6.1 STM32内部温度
STM32内部有一个温度传感器,用来测量周围及CPU的温度。该传感器和ADC1_IN16输入通道相连,此通道把传感器输出的电压值转换为数字值。温度传感器模拟输入推荐采样时间是 17.1μs。  STM32 内部温度传感器的使用很简单,只要设置一下内部 ADC,并打开其内部通道就差不多了。接下来我们介绍一下和温度传感器设置相关的地方。① 我们要使用 STM32 的内部温度传感器,必须先打开 ADC 的内部通道。② STM32 的内部温度传感器固定的连接在 ADC 1的通道 16 上,所以,我们在设置好 ADC 之后只要读取通道 16 的值,就是温度传感器返回来的电压值了。根据这个值,我们就可以计算出当前温度。计算公式如下:
               T(℃)={V25-Vsense/Avg_Slope}+25
上式中:
V25=Vsense 25 度时的数值(典型值为:1.43)。
Avg_Slope=温度与 Vsense 曲线的平均斜率(单位为 mv/℃或 uv/ ℃)(典型值为
4.3Mv/℃)。
利用以上公式,我们就可以方便的计算出当前温度传感器的温度了。
file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\ksohtml\wps2D9.tmp.jpg
6.2实验说明:
在本实验中,主要使用STM32F107ADC采集内部温度,并在彩屏上显示,LED1灯闪烁指示程序的运行。
主要跳线帽:JP4JP7都接在2-3
6.3硬件说明:
注意3.2寸彩屏与板子TFT LCD接口引脚的对应。
6.4程序说明:
本实验配置主要是ADC的配置,其通道要选择对应的测量内部温度的通道(ADC_Channel_16)函数在hw_config.c文件。
ADC_RegularChannelConfig(ADC1,ADC_Channel_TempSensor,1,ADC_SampleTime_239Cycles5)。来看看这个函数,第一个输入参数是ADC1ADC2;第二个是ADC通道;第三个是规则组采样顺序,取值范围是1~16;第四个是采样时间。
    再者就是LCD的驱动,这里我们已经写好了LCD的驱动函数,你只需要直接调用就可以,至于如何实现字符的显示,你可以详细阅读我们的程序。需要注意的是你的LCD的驱动芯片是否与我们所编写的函数相对应。
6.5实验现象:
彩屏蓝色字体显示“Gold Dragon STM32”,“ TEMPERATE TEST”,“ www.openmcu.com”红色字体显示:"TEMP_VAL:","TEMP_VOL:0.000V","TEMPERATE:00.00C"后面的值会动态的修改。一个LED灯闪烁指示程序运行。
沙发
szopenmcu|  楼主 | 2015-4-15 11:37 | 只看该作者
本帖最后由 szopenmcu 于 2015-4-15 14:01 编辑

第九章 金龙107——PWM输出

9.1 PWM简介:
脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。PWM 本质上其实就是一种周期一定,而高低电平占空比可调的方波。
9.2实验说明:
    在本实验中,主要使用STM32F107TIM4_CH3,程序下载运行后,
9.3硬件说明:
这节实验是用TIM4_CH3产生PWM,没涉及其他硬件
9.4程序说明:
    分析一下TIM4定时器工作在PWM1模式下的工作机制。当定时器启动计数后,若当前计数值小于某通道(假设为通道3)的比较值,则对应通道3的引脚保持高电平;而若当前计数值递增至大于某通道比较值的水平,则引脚翻转为低电平;计数值继续增大至重装载值的水平时,引脚复而保持高电平,计数值重新装载再次计数,以此重复以上过程。如果将输出比较值设为Vcom,重装载值设为Vprer,则可以计算出这种参数设置下所产生的PWM信号频率Fpwm为Fpwm=72 000 000/Vprer
其中72 00 000TIM计数时钟1分频所得,而该PWM信号的占空比Duty
                           Duty=Vcom/Vprer*100%
接下来我们打开 main.c 文件,看到如下代码
9.5实验现象:
JLINK下载运行后,用示波器探头接到PB8,对应金龙板子上CN3PWM输出端口,可以看到10kHz的频率,占空比为50%的波形。

使用特权

评论回复
板凳
szopenmcu|  楼主 | 2015-4-15 14:07 | 只看该作者
第十章 金龙107——SD卡(SPI

10.1 SD card:
    SD 卡(Secure Digital Memory Card)中文翻译为安全数码卡,它是在 MMC 的基础上发展而来,是一种基于半导体快闪**器的新一代**设备,它被广泛地于便携式装置上使用,例如数码相机、个人数码助理(PDA)和多媒体播放器等。 SD 卡由日本松下、东芝及美国 SanDisk公司于 1999 年 8 月共同开发研制。大小犹如一张邮票的 SD **卡,重量只有 2 克,但却拥有高**容量、快速数据传输率、极大的移动灵活性以及很好的安全性。按容量分类,可以将SD 卡分为 3 类:SD 卡(2G以下)、SDHC 卡(2G~32G)、SDXC 卡(32G~2T)。
10.2实验说明:
在本实验中,主要跳线帽:JP10,JP11,JP4和JP7都接在2-3上,接上串口线,JP4和JP7是boot脚,所以要接地。本实验用到USART串口,所以要把JP10和JP11接在2-3上。本实验,主要通过SPI的方式对SD卡的第一个扇区进行读取,然后通过串口将数据打印输出。还有就是对SD卡容量的计算。支持32G以下的SD卡。
在本实验中,主要跳线帽:JP10,JP11,JP4和JP7都接在2-3上,接上串口线
10.3硬件说明:
本实验主要涉及的SD卡的操作和USART
10.4程序说明:
本实验的重点在于SD卡的读写规范和SPI的使用
首先是SPI的初始化,端口的初始化要选择复用模式。开启SPI的时钟
其次是按照SD卡的读写规范,初始化SD卡,SD卡的读写规范,请查看相关文档,程序的实现请查看具体的程序编写。
10.5实验现象:
连接串口线,打开并设置好串口调试助手,下载程序并运行,LD1闪烁表示程序运行,串口调试助手的设置和现象如下图。

使用特权

评论回复
地板
fhguo1990| | 2015-4-15 19:38 | 只看该作者
STM32F107的几个实验教程

使用特权

评论回复
5
我思故我在12345| | 2015-4-15 20:57 | 只看该作者
金龙107——内部温度

使用特权

评论回复
6
szopenmcu|  楼主 | 2015-4-16 14:06 | 只看该作者
第十一章 金龙107——SD卡文件系统(SPI

11.1 FATFS:
FATFS 是一个完全免费开源的 FAT文件系统模块,专门为小型的嵌入式系统而设计。它完全用标准 C语言编写,所以具有良好的硬件平**立性,可以移植到 8051、PIC、AVR、SH、Z80、H8、ARM等系列单片机上而只需做简单的修改。支持 FATl2、FATl6和 FAT32,支持多个存储媒介;有独立的缓冲区,可以对多个文件进行读/写
11.2实验说明:
  在本实验中,主要跳线帽: JP4和JP7都接在2-3上,本实验在上个实验的基础上添加FATFS文件系统,并实现对TXT文档的读写,我们首先要在SD卡中建立一个TXT文档,其文档名要根据程序中的设置一样。然后在该文档中写入一定量的字符即可。该程序会再建立一个文档,其文档名根据程序,然后把你建立的文档中的内容依次拷贝到由程序建立的TXT文档中。
在本实验中,主要跳线帽: JP4JP7都接在2-3上,
11.3硬件说明:
本实验主要涉及的SD卡的操作,和上一章的硬件资源是一样的。
11.4程序说明:
本实验的重点在于SD卡的底层驱动与文件系统的衔接,这个主要是对应相应的函数名,在diskio.c中编写了底层驱动与文件系统之间的衔接函数,
SD卡的初始化
扇区的读取
写扇区
移植还要注意的是在diskio.c中,要包含SD卡的底层驱动文件
main中要包含diskio.c
要打开文档需要声明几个变量
在主函数中,首先要初始化SD卡,f_mount挂载分区文件系统,接下来就是打开两个文档,一个是已经创建好的已有待读取的文档,另一个文档,如果没有,则系统会自动创建。接下来对待读取文档进行读取同时写入另一个文档,最后关闭两个文档
11.5实验现象:
SD卡中要首先创建test.txt文档,并写上若干字符并保存,开发板SD卡槽插上SD卡,下载程序,并运行。会发现SD卡中多了一个DEM.txt文档,里面的内容和test.txt文档内容一样。

使用特权

评论回复
7
szopenmcu|  楼主 | 2015-4-16 15:56 | 只看该作者
本帖最后由 szopenmcu 于 2015-4-23 14:06 编辑

第十二章 金龙107——24C02IIC_ EEPROM
12.1 IIC简介:
(InterIntegrated Circuit)总线是一种由NXP (PHILIPS )公司开发的两线式串行总线,用于连接微控制器及其外围设备。它是由数据线 SDA 和时钟 SCL 构成的串行总线,可发送和接收数据。在 CPU 与被控 IC 之间、IC IC 之间进行双向传送,传输速率在标准模式下可达100kbps,快速模式下可达 400kbps 总线在传送数据过程中共有三种类型信号, 它们分别是:开始信号、结束信号和应答信号。
    开始信号:SCL 为高电平时,SDA 由高电平向低电平跳变,开始传送数据。
    结束信号:SCL 为高电平时,SDA 由低电平向高电平跳变,结束传送数据。
    应答信号:接收数据的 IC 在接收到 8bit 数据后,向发送数据的 IC 发出特定的低电平脉冲,表示已收到数据。 CPU 向受控单元发出一个信号后,等待受控单元发出一个应答信号, CPU 接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。
    这些信号中,起始信号是必需的,结束信号和应答信号,都可以不要。
掌握的协议层才是掌握总线的关键,至于物理层在上文已有简单介绍。
1) 数据的有效性
      在时钟高电平期间,SDA线上的数据必须保持稳定,数据线仅可在SCL为低电平时改变。
                 
2) 起始和结束条件
SCL为高电平时,SDA上由高到低跳变被定义为起始条件;
SCL为高电平时,SDA上由低到高跳变被定义为结束条件,总线在起始条件之后被视为忙状态,在停止条件之后被视为空闲状态。
3) 应答
每当主机向从机发送完一个字节的数据,主机总是需要等待从机给出一个应答信号以确认从机是否接受到数据。从机应答主机所需的时钟仍是主机提供。

12.2实验说明:
    本节进行的实验设计是用STM32F107VC24C02file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\ksohtml\wps376.tmp.png通信方式进行读写操作,并通过串口
在本实验中,主要跳线帽: JP10JP11JP4JP7都接在2-3上,
12.3硬件说明:
    AT24C02是带有I2C总线接口的E2PROM存储器,具有掉电**的功能,并且可以象普通RAM一样用程序改写。它的容量是256个字节(00h0ffh),有A2A1A0三位地址,可见I2C总线上可以连接8AT24C02,它的寻址字节是1010 A2A1A0 R/W。下图是金龙107板上24C02的电路连接:
      
12.4程序说明:
    本实验的重点在于IIC的配置,我们要用到IIC,那肯定要对它进行相应的初始化,主要在这个I2C_ee.c文件里。
IIC的初始化
编写相关初始化函数之后,然后要编写eeprom读写操作的函数。这里用到了两个读写的函数void I2C_EE_BufferWrite(uint8_t* pBuffer, uint8_t WriteAddr, uint16_t NumByteToWrite),void I2C_EE_BufferRead(uint8_t* pBuffer, uint8_t ReadAddr, uint16_t NumByteToRead)
第一个入口参数是指针* pBuffer,指向包含被写入到EEPROM中的数据的缓冲区,第二个是你要写/读的地址,最后一个是要写/读的字节数。
12.5实验现象:
下载程序,复位运行,连接上串口线至J3,设置好串口调试助手,注意JP6要短接才能正常通讯。


使用特权

评论回复
8
szopenmcu|  楼主 | 2015-4-17 10:38 | 只看该作者
第十三章 金龙107——W25Q16SPI_ FLASH

13.1 SPI简介:
SPI (Serial Peripheral interface),翻译过来就是串行外围设备接口。主要应用在 EEPROMFLASH,实时时钟,AD 转换器,还有数字信号处理器和数字信号解码器之间。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为 PCB 的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议,当然,STM32 也有 SPI 接口。
13.2实验说明:
在本实验中,主要跳线帽: JP10JP11JP4JP7都接在2-3上,
13.3硬件说明:
本节通过将STM32片上的spi1外设接口与w25q16进行读写操作。
CS:片选线                    PB9  
SCLK:串行时钟线              PA5
MISO:主机输入从机输出        PA6
MOSI:主机输出从机输入        PA7
13.4程序说明:
    正确的配置是成功使用STM32 SPI接口的重要前提,而STM32 SPI 接口有很多参数,比如方向(双工或单工)、速率、片选模式、数据长度、数据模式、时序组合,都能对SPI的通讯产生直接影响,因此,本次试验设计的要点是SPI设备的初始化过程上。
接下来就是对W25Q16进行读写的函数,详细的程序可参考w25q16.c
13.5实验现象:
下载程序,复位运行,连接上串口线至J3,设置好串口调试助手

使用特权

评论回复
9
szopenmcu|  楼主 | 2015-4-17 14:17 | 只看该作者
第十四章 金龙107——RS485

14.1 RS485 :                 
RS485是采用差分信号负逻辑来传输信号的,-2V-6V表示“0”,+2V+6V表示“1”。RS485有两线制和四线制两种接线,四线制只能实现点对点的通信方式,现很少采用,现在多采用的是两线制接线方式,这种接线方式为总线式拓扑结构在同一总线上最多可以挂接32个结点。在RS485通信网络中一般采用的是主从通信方式,即一个主机带多个从机。很多情况下,连接RS-485通信链路时只是简单地用一对双绞线将各个接口的“A”、“B”端连接起来。而忽略了信号地的连接,这种连接方法在许多场合是能正常工作的,但却埋下了很大的隐患,这有二个原因:(1)共模干扰问题: RS-485接口采用差分方式传输信号方式,并不需要相对于某个参照点来检测信号,系统只需检测两线之间的电位差就可以了。但人们往往忽视了收发器有一定的共模电压范围,RS-485收发器共模电压范围为-7+12V,只有满足上述条件,整个网络才能正常工作。当网络线路中共模电压超出此范围时就会影响通信的稳定可靠,甚至损坏接口。(2)EMI问题:发送驱动器输出信号中的共模部分需要一个返回通路,如没有一个低阻的返回通道(信号地),就会以辐射的形式返回源端,整个总线就会像一个巨大的天线向外辐射电磁波。
RS485 推荐使用在点对点网络中, 线型,总线型,不能是星型,环型网络。理想情况下 RS485需要 2 个匹配电阻,其阻值要求等于传输电缆的特性阻抗 (一般为 120Ω) 。没有特性阻抗的话,当所有的设备都静止或者没有能量的时候就会产生噪声,而且线移需要双端的电压差。没有匹配电阻的话,会使得较快速的发送端产生多个数据信号的边缘,导致数据传输出错。
14.2实验说明:
    本节进行的实验设计是用两块金龙STM32F107VC通过RS485通信。主要跳线帽: JP10JP11JP4JP7都接在2-3上,JP3接在1-2
14.3硬件说明:
金龙107开发板采用 SP3485 作为收发器,最大传输速度可达10Mbps,支持多达 32
个节点。
    图中 AB 是总线接口,用于连接 485 总线。RO 是接收输出端(PD6)DI 是发送数据收入端(PD5)RE是接收使能信号(低电平有效),DE 是发送使能信号(高电平有效)。
14.4程序说明:
485只是定义了传输的电压,阻抗等,编程方式和普通的串口编程一样 。   
14.5实验现象:
A板,需要屏蔽掉接收函数,然后编译下载,B板 需要屏蔽发送函数,然后编译下载,连接好A板  B板,复位, A板会向B板发送"a"B板接收到"a"之后,BLED1闪烁,注意JP3要接1-2才能正常通讯。



使用特权

评论回复
10
szopenmcu|  楼主 | 2015-4-20 15:26 | 只看该作者
第十五章 DS18B20(温度传感器)实验

15.1 DS18B20S数字温度传感器:
DS18B20 是由 DALLAS 半导体公司推出的一种的“单总线”接口的温度传感器。与传统的热敏电阻等测温元件相比,它是一种新型的体积小、适用电压宽、与微处理器接口简单的数字化温度传感器。测量温度范围为-55~+125℃  ,精度为±05℃。它能直接读出被测温度,并且可根据实际要求通过简单的编程实现 9~12 位的数字值读数方式。它工作在 35.5 V 的电压范围,采用多种封装形式,从而使系统设计灵活、方便,设定分辨率及用户设定的报警温度存储在 EEPROM 中,掉电后依然保存。
15.2实验说明:
由于开发板上标准配置是没有 DS18B20 这个传感器的,只有接口,所以要做本章的实验,大家必须找一个 DS18B20 焊接到预留的 18B20 接口上。本节实验是读取DS18B20的温度并显示在 LCD 上。
15.3硬件说明:
               
   从上图可以看出,我们使用的是 STM32 PB10 来连接 U6 DQ 引脚,将 DS18B20 传感器焊接到这个上面就可以通过 STM32 来读取 DS18B20 的温度了。
15.4程序说明:
打开我们的DS18B20实验的工程,可以看到工程里添加了 DS18B20.c 文件以及其
头文件 DS18B20.h 文件,所有 DS18B20 驱动代码和相关定义都分布在这两个文件中。
这部分代码就是根据单总线操作时序来读取 DS18B20 的温度值的, DS18B20
的温度通过 DS18B20_Get_Temp 函数读取,该函数的返回值为带符号的短整形数据,返回值的范围为-550~1250,其实就是温度值扩大了 10 倍。然后我们打开 ds18b20.h,该文件下面主要是一些 IO 口位带操作定义以及函数申明,没有什么需要特别讲解的地方。最后打开 main.c
主函数代码比较简单,一系列初始化之后,判断18b20初始化是否成功,成功则把读取的温度显示在 LCD 上。到这里,我们本章的软件设计就讲到这儿了。
15.5实验现象:

使用特权

评论回复
11
szopenmcu|  楼主 | 2015-4-21 11:54 | 只看该作者
第十六章 红外解码

16.1红外遥控简介:
1、红外编解码
在光谱中波长自0.76至400微米的一段称为红外线,红外线是不可见光线。为了防止自然界中的红外线干扰,一般对红外线进行编码调制后进行通信,一般使用38KHz进行调制,如今使用红外遥控有两种编码方式:PWM编码(脉宽调制)和PPM编码(脉冲位置调制)
二进制数调制
PWM编码:发射载波的占空比代表”0”和”1”,发射红外载波的时间固定,通过改变不发射载波的时间来改变占空比。
PPM编码:发射载波脉冲之间的时间的长短来代表”0”和”1”,本次实验使用的红外遥控是PPM格式的编码格式,编码格式参考http://www.cublog.cn/u3/105675/showart_2420421.html,当发射器按键按下后,将发射一组108ms的编码脉冲(对于不同的遥控器其编码格式不同)。遥控编码脉冲由前导码、16位地址码(8位地址码、8 位地址码的反码)和16位操作码(8位操作码、8位操作码的反码)组成。
如下图,当第一次发送时引导码9ms 的载波波形和4.5ms的关断时间构成,在发重复码时,引导码由一个9ms的载波波形和2.25ms的关断时间构成。
如下图以脉宽为0.56ms、周期为1. 12ms 的组合表示二进制的“0”,以脉宽为1. 68ms 、周期为2. 24ms 的组合表示二进制的“1”。
2、HS0038
红外接收探头,接收红外信号频率为38kHz,周期约26μs,同时能对信号进行放大、检波、整形,得到TTL电平的编码信号。
红外线信号被红外接收头接收到后,经过HS0038内部的放大、检波、整型后滤除了38KHz的载波,如下图是接收到的波形与对应输出波形,输出的有用信号与原PPM编码信号相反。
16.2实验说明:
本实验采用外部中断功能实现红外解码,并在 LCD 上显示键值和所代表的意义,以及按键次数等信息。同时用 LED1来指示程序正在运行。
16.3硬件说明:
16.4程序说明:
本次实验使用stm32的PB0脚与红外接收头,通过配置PB0为外部中断,当没有红外信号时HS0038输出高电平,接收到红外信号的引导码后触发下降沿中断,进入中断函数对信号进行解码,信号接收完成后PB0为高电平,通过判断高电平时间大于5ms时退出中断函数,并将接收到的32位数据存放在Remote_Odr
当进入中断程序后,通过判断高电平持续时间即高脉冲宽度来判断信号类型,使用Pulse_Width_Check函数来检测高电平时间,使用宏定义#define RDATA GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0)读取PB0的状态,如下当PB0为高电平时,延时20us,同时t加一,直到PB0变为低电平或高电平时间达到5ms退出返回t,高电平时间t*20us,实验使用系统定时器作为延时,确保延时的精准,这里不做介绍。
这里介绍红外解码的相关时序
1)当res=250时,高电平时间大于5ms为无用信号,退出处理函数;
2)当250>res>200时,即5ms>t>4ms被认为是引导码4.5ms,并且OK=1,表明后面的为数据信号可以接收;
3)当200>res>85时,即4ms>t>1.7ms被认为是第二次发送引导码2.25ms;
4)当85>res>50时,即1.7ms>t>1ms被认为是1.5ms代表“1”;
5)当50>res>10时,即1ms>t>0.2ms被认为是0.5ms代表“0”;
在发送完成后Remote_Rdy置1来标志接收到了数据,在主程序中循环判断是否接收到数据,若接收到则进入Remote_Process进行键值处理,Remote_Odr中的24-31位为地址码,16-23位为地址反码,8-15位为键值,0-7位为键值反码。判断并返回键值,在主程序中显示出对应键值对应的按键码。
16.5、实验现象:
下载程序后,安装3.2寸彩屏模块,重新上电,使用实验遥控对着开发板的红外接收头按下按键,在LCD屏上显示按键对应的标号,对于不同的遥控器编码也会有区别,本次使用“car mp3遥控器”。
                           
                  
               

使用特权

评论回复
12
perry_peng| | 2015-4-21 15:33 | 只看该作者
谢谢分享。

使用特权

评论回复
13
zh113214| | 2015-4-21 20:30 | 只看该作者
图文并茂,不错的学习资料。。。

使用特权

评论回复
14
szopenmcu|  楼主 | 2015-4-23 14:17 | 只看该作者
本帖最后由 szopenmcu 于 2015-4-23 14:19 编辑

第十八章 金龙107——收音机

18.1TEA5767简介:
TEA5767是飞利浦公司生产的一款收音机芯片,很多手机,MP3MP4里的收音机功能都是于他实现的,接收频率76MHz~108MHz(日本/美国/欧洲频段选择),中频频率225kHz,采用锁相环调谐系统,带有AGC电路,并可以使用软件进行静音和消除噪音。主要电性能指标:工作电压2.5V~5.0V,工作电流10mA,灵敏度15uA,立体声分离度30dB,信噪比60dB,输出信号电平75mV。总线通信可选IIC3线总线,具有RF信号强度ADC输出,软件静音。
18.2TEA5767读写:
金龙107开发板通过IIC总线与TEA5767模块连接,其电路接口如下图,PB11IIC数据线,PB10IIC时钟线,T1连接外接天线,FM_OUTLFM_OUTR为音频输出。
TEA5767I 2C总线的地址是C0是可收发的从器件结构,向TEA5767写入数据时,其低位地址为0C0,从TEA5767读出数据时其低位地址为1C1
写时序:

其中传送数据中的bit位的含义可以参考芯片手册。
18.3、实验说明:
实验中使用到了TEA5767收音机模块和WM8978芯片,这里主要是将WM8978作为功率放大器,因此这里不做说明。
如下是向TEA5767写入数据
static void tea5767_Write(uint8_t *_ucaBuf, uint8_t _count)
{
        uint8_t i;
        uint8_t ucAck;
        i2c_Start();
        i2c_SendByte(TEA5767_SLAVE_ADDRESS | I2C_WR);/*发送设备写地址 */
        ucAck = I2C_WaitAck();        /*检测ACK*/
        if (ucAck == 1)
        {
                goto err_quit;
        }

        for (i = 0; i < _count; i++)
        {
                i2c_SendByte(_ucaBuf);/*发送数据 */
                ucAck = I2C_WaitAck();/*检测ACK*/
                if (ucAck == 1)
                {
                        goto err_quit;
                }
        }

err_quit:
i2c_Stop();
}
如下是从TEA5767读出数据
static void tea5767_Read(uint8_t *_ucaBuf)
{
        uint8_t i;
        uint8_t ucAck;
        i2c_Start();
        i2c_SendByte(TEA5767_SLAVE_ADDRESS | I2C_RD);/*发送设备读地址C1 */
        ucAck = I2C_WaitAck();/*检测ACK */
        if (ucAck == 1)
        {
                goto err_quit;
        }

        for (i = 0; i < 5; i++)
        {
                _ucaBuf = i2c_ReadByte();                //读取数据
                if (i == 4)
                {
                        i2c_Ack();                //发送ACK
                }
                else
                {
                        i2c_NAck();                //发送NACK
                }
        }
err_quit:
i2c_Stop();        
}
通过写入数据来设置TEA5767工作模式和调节频道,使用按键调节收音机音量频道等可以参考程序fm_radio.c文件。
18.4、实验现象:
插上串口线设置波特率为115200PB11IIC数据线需用10K上拉电阻,下载程序后复位开发板,开发板自动搜索到一个电台后开始播放,串口打印出电台频率等信息。使用方向键上下可以调节音量,左右调节频道,按键S1控制静音等。

使用特权

评论回复
15
szopenmcu|  楼主 | 2015-4-24 14:59 | 只看该作者
第十九章  OV7670摄像头实验(3.2寸屏)

19.1摄像头(OV7670)简介:
图像传感器,体积小,工作电压低,提供单片VGA摄像头和影像处理器的所有功能。通过SCCB总线控制,可以输入整帧、子采样、取窗口等方式的各种分辨率8位影像数据。该产品VGA图像最高达到30/秒。用户可以完全控制图像质量、数据格式和传输方式。所有图像处理功能过程包括伽玛曲线、白平衡、饱和度、色度等都可以通过SCCB接口编程。OmmiVision图像传感器应用独有的传感器技术,通过减少或消除光学或电子缺陷如固定图案噪声、托尼、浮散等,提高图像质量,得到清晰的稳定的彩色图像。
控制方式:通过I2C来设置OV7670的参数,然后通过FIFO并口读取颜色值。
部分寄存器介绍
厂商ID
输出模式
图像方向交换
测试图案
19.2硬件介绍:
19.3程序说明:
主函数流程如下:
[size=10.5000pt]A、串口初始化
[size=10.5000pt]B、彩屏初始化
[size=10.5000pt]C、摄像头初始化
[size=10.5000pt]D、循环读取OV7670的数据
关于摄像头初始化如下
OV7670初始化流程如下:
[size=10.5000pt]A、模拟I2CIO口初始化
[size=10.5000pt]B、打开STM32PA8脚给摄像头提供时钟
[size=10.5000pt]C、OV7670ID,判断是否通信正常
[size=10.5000pt]D、初始化FIFO并口IO
[size=10.5000pt]E、OV7670参数配置
19.4试验现象:
插上(3.2)LCD屏,摄像头模块,需要注意的是:拔掉JP9的掉线帽。
下载程序,并复位。3.2寸屏显示摄像头实时采集的图像。



使用特权

评论回复
16
szopenmcu|  楼主 | 2015-4-25 14:49 | 只看该作者
第二十章 金龙 107——CAN20.1 CAN 简介
CAN 是控制器局域网络(Controller Area Network, CAN)的简称,是由研发和生产汽车 电子产品著称的德国 BOSCH 公司开发了的,并最终成为国际标准(ISO 11898)。是国际 上应用最广泛的现场总线之一。 在北美和西欧,CAN 总线协议已经成为汽车计算机控制系 统和嵌入式工业控制局域网的标准总线,并且拥有以 CAN 为底层协议专为大型货车和重工 机械车辆设计的 J1939 协议。
1) 用 CAN 优势
CAN 属于现场总线的范畴,它是一种有效支持分布式控制或实时控制的串行通信网络。较 之许多 RS-485 基于 R 线构建的分布式控制系统而言,基于 CAN 总线的分布式控制系统在 以下方面具有明显的优越性:
2) 网络各节点之间的数据通信实时性强
首先,CAN控制器工作于多种方式,网络中的各节点都可根据总线访问优先权(取决于报文标识符)采用无损结构的逐位仲裁的方式竞争向总线发送数据,且CAN协议废除了站地址编码,而代之以对通信数据进行编码,这可使不同的节点同时接收到相同的数据,这 些特点使得  CAN总线构成的网络各节点之间的数据通信实时性强,并且容易构成冗余结构,提高系统的可靠性和系统的灵活性。而利用RS-485只能构成主从式结构系统,通信方式也只能以主站轮询的方式进行,系统的实时性、可靠性较差;
3) 缩短了开发周期
CAN 总线通过CAN收发器接口芯片82C250 的两个输出端CANH和CANL与物理总 线相连,而CANH端的状态只能是高电平或悬浮状态,CANL端只能是低电平或悬浮状态。这就保证不会在出现在RS-485网络中的现象,即当系统有错误,出现多节点同时向总线发送数据时,导致总线呈现短路,从而损坏某些节点的现象。而且CAN节点在错误严重的情况下具有自动关闭输出功能,以使总线上其他节点的操作不受影响,从而保证不会出现象在网络中,因个别节点出现问题,使得总线处于“死锁”状态。而且,CAN具有的完善的 信协议可由CAN控制器芯片及其接口芯片来实现,从而大大降低系统开发难度,缩短了开发周期,这些是仅有电气协议的RS-485所无法比拟的。
4) 已形成国际标准的现场总线
另外,与其它现场总线比较而言,CAN总线是具有通信速率高、容易实现、且性价比高等诸多特点的一种已形成国际标准的现场总线。这些也是CAN总线应用于众多领域,具有强劲的市场竞争力的重要原因。
5) 最有前途的现场总线之一
CAN即控制器局域网络,属于工业现场总线的范畴。与一般的通信总线相比,CAN总线的数据通信具有突出的可靠性、实时性和灵活性。由于其良好的性能及独特的设计,CAN总线越来越受到人们的重视。它在汽车领域上的应用是最广泛的,世界上一些著名的汽车制造厂商,如 BENZ(奔驰)、BMW(宝马)、PORSCHE(保时捷)、ROLLS-ROYCE(劳斯莱斯)和 JAGUAR(美洲豹)等都采用了CAN总线来实现汽车内部控制系统与各检测和执 行机构间的数据通信。同时,由于CAN总线本身的特点,其应用范围已不再局限于汽车行业,而向自动控制、航空航天、航海、过程工业、机械工业、纺织机械、农用机械、机器人、数控机床、医疗器械及传感器等领域发展。CAN已经形成国际标准,并已被公认为几种最有前途的现场总线之一。其典型的应用协议有:SAE J1939/ISO11783 、CANOpen、CANaerospace、DeviceNet、NMEA 2000 等。
20.2 试验说明
本节进行的试验需要两块开发板(或者用 USB 转 CAN),两块金龙 107 的开发板CAN1对接好,9针串口分别接到电脑上,通过串口调试互相通信。
20.3 硬件说明
20.4 程序说明
主函数->CAN 时钟初始化->然后串口->CAN 初始化
CAN1 初始化后打开了 CAN1 的接收中断
然后 IO 口初始化 其中有一句GPIO_PinRemapConfig(GPIO_Remap2_CAN1, ENABLE ); PD0 、PD1做CAN功能需要重映射
重映射如下
下面是 CAN 控制器的初始化 关于波特率的配置
程序中,这三个值如下
CAN1是挂在APB1上的,APB1的时钟 36M那么CAN的波特率= APB1/(1+3+5)/8 = 36M/9/8 = 500Kfile:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\ksohtml\wps1F3.tmp.png CAN滤波设置末做滤波处理关于CAN中断



CAN中断接收到数据后,通过串口做一次转发。当串口口发生中断后,也会通过CAN做一次转发。
20.5 试验现象
该例程需要两套开发板,分别将两套板子用串口线连接到电脑,两个板子之间用两根导线连接CANH和CANL,若想测试远距离通讯请使用双绞线。例程使用的是UART1和CAN1。
LED 灯用来指示程序得运行状态其中 :
D1:表示程序运行正常
D2:表示 CAN 接收数据
D3:表示 UART 接收数据
整个通讯过程类似 QQ 聊天,电脑端使用串口调试助手发送和显示内容。对应的指示数据收发和程序运行的 LED 也会闪烁。

使用特权

评论回复
17
598330983| | 2015-4-25 22:15 | 只看该作者
STM32内部有一个温度传感器,用来测量周围及CPU的温度

使用特权

评论回复
18
598330983| | 2015-4-25 22:15 | 只看该作者
主要使用STM32F107的TIM4_CH3

使用特权

评论回复
19
598330983| | 2015-4-25 22:15 | 只看该作者
szopenmcu 发表于 2015-4-15 11:37
第九章 金龙107——PWM输出

9.1 PWM简介:脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简 ...

TIM4定时器工作在PWM1模式下的工作机制

使用特权

评论回复
20
wangbao619| | 2015-4-27 11:40 | 只看该作者
有很多例程都很实用

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:专业生产销售STM32开发板,仿真器,http://openmcu.taobao.com/

71

主题

283

帖子

11

粉丝