TLC2543和TLV5614的STM32程序

发布者:自由探索者最新更新时间:2021-10-19 来源: eefocus关键字:TLC2543  TLV5614  STM32程序 手机看文章 扫描二维码
随时随地手机看文章

使用STM32的两个硬件SPI完成数据的读写,具体的见程序注释


  1 /**************************(C) COPYRIGHT SunHao 2011***************************

  2 名称:ADDA.c

  3 功能:ADDA的相关配置以及读取函数

  4 作者:孙浩

  5 时间:2011.4.25

  6 版本:1.0

  7 注意:对照TLC2543时序图,确保对应时序一致,读写速度不宜太快

  8 *******************************************************************************/

  9 #include "STM32Lib//stm32f10x.h"

 10 #include "hal.h"

 11 //模拟开关CD4051对应的通道选择IO定义

 12 #define A_OFF    GPIO_ResetBits(GPIOF, GPIO_Pin_8)

 13 #define A_ON     GPIO_SetBits(GPIOF, GPIO_Pin_8)

 14 #define B_OFF    GPIO_ResetBits(GPIOF, GPIO_Pin_7)

 15 #define B_ON     GPIO_SetBits(GPIOF, GPIO_Pin_7)

 16 #define C_OFF    GPIO_ResetBits(GPIOF, GPIO_Pin_6)

 17 #define C_ON     GPIO_SetBits(GPIOF, GPIO_Pin_6)

 18 /*******************************************************************************

 19 名称:void ADDA_Config(void)

 20 功能:配置ADDA对应的SPI和IO

 21 参数:无

 22 时间:2011.4.20

 23 版本:1.0

 24 注意:配置类似函数一定要注意外设时钟使能,所有用到引脚时钟使能

 25 *******************************************************************************/

 26 void ADDA_Config(void)

 27 {

 28     SPI_InitTypeDef  SPI_InitStructure;

 29     GPIO_InitTypeDef GPIO_InitStructure;

 30     RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1,ENABLE);

 31     RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE);

 32     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOF,ENABLE);

 33     /*TLC2543相关IO口定义  */

 34     /* PA5-SCK PA7-MOSI */

 35     GPIO_InitStructure.GPIO_Pin =GPIO_Pin_5 |GPIO_Pin_7 ;

 36     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

 37     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

 38     GPIO_Init(GPIOA, &GPIO_InitStructure);

 39     /*PA4-CS*/

 40     GPIO_SetBits(GPIOA, GPIO_Pin_4);

 41     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;

 42     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

 43     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

 44     GPIO_Init(GPIOA, &GPIO_InitStructure);    

 45 

 46     /*PA6-MISO*/

 47     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;

 48     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

 49     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;

 50     GPIO_Init(GPIOA, &GPIO_InitStructure);

 51     

 52     /*TLV5614相关IO口定义  */

 53     /* PB13-SCK PB15-MOSI */

 54     GPIO_InitStructure.GPIO_Pin =GPIO_Pin_13 |GPIO_Pin_15 ;

 55     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

 56     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

 57     GPIO_Init(GPIOB, &GPIO_InitStructure);

 58     /*PB12-CS PB11-FS*/

 59     GPIO_SetBits(GPIOB, GPIO_Pin_11);//帧同步信号和片选信号初始化为高电平

 60     GPIO_ResetBits(GPIOB, GPIO_Pin_12);

 61     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11|GPIO_Pin_12;

 62     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

 63     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

 64     GPIO_Init(GPIOB, &GPIO_InitStructure);    

 65 

 66     /* SPI1 configuration 具体的SPI时序严格参照TLC2543数据手册*/

 67     SPI_Cmd(SPI1, DISABLE);                                                 //必须先禁能,才能改变MODE

 68     SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;        //两线全双工

 69     SPI_InitStructure.SPI_Mode = SPI_Mode_Master;                            //主

 70     SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b;                        //16位

 71     SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;                                //时钟脚空闲时保持低电平

 72     SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;                            //在第一个时钟沿采样数据信号

 73     SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;                                //软件NSS,片选信号由软件产生

 74     SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;    //256分频

 75     SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;                        //高位在前

 76     

 77     SPI_Init(SPI1, &SPI_InitStructure);

 78     SPI_Cmd(SPI1, ENABLE); 

 79     /* SPI2 configuration 具体的SPI时序严格参照TLV5614数据手册*/

 80     SPI_Cmd(SPI2, DISABLE);                                                 //必须先禁能,才能改变MODE

 81     SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;        

 82     SPI_InitStructure.SPI_Mode = SPI_Mode_Master;                            //主

 83     SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b;                        //16位

 84     SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;                                //时钟脚空闲时保持低电平

 85     SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;                            //在第一个时钟沿采样数据信号

 86     SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;                                //软件NSS,片选信号由软件产生

 87     SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;    //256分频

 88     SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;                        //高位在前

 89     

 90     SPI_Init(SPI2, &SPI_InitStructure);

 91     SPI_Cmd(SPI2, ENABLE); 

 92     //模拟开关通道选择IO口定义    

 93     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8;

 94     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;    //开漏输出

 95     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;    //50M时钟速度

 96     GPIO_Init(GPIOF, &GPIO_InitStructure);

 97     A_OFF;

 98     B_OFF;

 99     C_OFF;

100     GPIO_SetBits(GPIOB, GPIO_Pin_11);//帧同步信号初始化为高电平

101     GPIO_ResetBits(GPIOB, GPIO_Pin_12);

102 }

103 /*******************************************************************************

104 名称:u16 Read_AD(u16 chan)

105 功能:读取对应通道的AD值

106 参数:chan对应的通道,取值0-15,返回值0-4095

107 时间:2011.4.20

108 版本:1.0

109 注意:后八个通道是通过模拟开关切换,受模拟开关切换速度影响,能够读取的速度要比

110       前八个通道慢

111 *******************************************************************************/

112 u16 Read_AD(u16 chan)

113 {

114     u16 i,ADCdata,chanaddr;

115     if(chan<=7)

116     {

117         chanaddr= chan <<12;

118         chanaddr|=0x0C00; 

119     }

120     else

121     {

122         chanaddr=8;//通过模拟开关进行输入,模拟开关接入第八通道

123         chanaddr<<=12;

124         chanaddr|=0x0C00; 

125         switch (chan)

126         {

127             case 8:

128                 A_OFF;

129                 B_OFF;

130                 C_OFF;

131                 break;

132             case 9:

133                 A_ON;

134                 B_OFF;

135                 C_OFF;

136                 break;

137             case 10:

138                 A_OFF;

139                 B_ON;

140                 C_OFF;

141                 break;

[1] [2]
关键字:TLC2543  TLV5614  STM32程序 引用地址:TLC2543和TLV5614的STM32程序

上一篇:CPLD被STM32读写VHDL程序
下一篇:STM32 在16位数据宽度下的地址问题

推荐阅读最新更新时间:2024-11-11 11:49

STM32单片机LCD240128搬货物Proteus仿真程序
单片机源程序如下: #include reg52.h #include SS.h //关卡的界面 #include SB.h //在此文件中定义了汉字编码,用点阵液晶字模提取软件 #define uchar unsigned char #define uint unsigned int sbit cd = P2^0; //=0,数据通道;=1,命令通道 sbit rd = P2^1; //=0,读选通有效 sbit wr = P2^2; //=0,写选通有效 sbit ce = P2^3; sbit md = P2^4; sbit rst= P2^5; uchar renh=6
[单片机]
<font color='red'>STM32</font>单片机LCD240128搬货物Proteus仿真<font color='red'>程序</font>
STM32的ISP方式和IAP方式下载程序有什么区别
都可以通过串口来下载啊 ISP方式:需要将BOOT管脚配置成上电从System Memory启动,System Memory中有一段BOOTLOADER来接收串口来的数据,把它们烧写到FLASH中。 IAP方式:是用户自己写一段烧写程序,通过ISP或者仿真器事先烧写到用户FLASH中,使用时通过某种方式触发这段程序,再来从串口接收数据,然后烧到相应的FLASH中,不需要改变BOOT管脚配置。
[单片机]
stm32 在IAR的第一个程序 点亮led
//使用前要建立好了工程的模板,这个可以参考我的stm32工程模板的建立一文 1:工程文件加入我们的led驱动主要是由led.h和led.c组成,再根据这个写自己的main 2: led.c的编写 #include led.h //这个 是led.h这个头文件 void led_gpio_init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);//这个的配置可以查看原理图我的是 GPIOE GPIO_InitStructure.GPIO_P
[单片机]
STM32单片机解码NEC红外控制器C语言程序
简介:红外遥控器发射码值的协议有很多种,在百度文库里搜“史上最全的红外遥控器编码协议”,可以看到是有43种,但是我们今天是解码NEC红外协议的,几乎所有的开发板带的小遥控器都是这个协议的,我是用的定时器配合外部中断写的解码程序。 #include ir_exti.h //利用外部中断和定时器进行红外解码 //在51上学习的 u8 irtime;//定时器时间累加 u8 irflag;//接收到第一个下降沿的标志 u8 irdate;//接收下降沿次数的累加 u8 irtable ;//装每一次下降沿的时间 //u8 irdateok; u8 irtable2 ;//解码出地址和数据 地址 地址反码
[单片机]
STM32STM32驱动 LCD12864程序代码(串行方式)
引言: 这里我们只讲解接线和代码实现,具体的原理在上一篇博客中已经讲解,如果想了解具体原理可以查看上一篇博客 《STM32 LCD12864 串行通信模式 (从原理让你理解)》 下方代码的实现也是基于上一篇的讲解顺序来的 设备: STM32F407ZGT6 引脚接线: VSS——GND VDD——VCC(5V or 3.3V) V0 亮度调节 不接 CS ——接VCC,持续高电平,一直选通。 SID ——接PE1 SCLK ——接PE0 PSB——接GND 串行模式 或者飞线与1脚相连 BLA——VCC(5V or 3.3V) 或者飞线与2脚相连 BLK——
[单片机]
关于ST-Link下载STM32程序的使用
ST-Link非常好用,既可以像JLINK那样在软件中直接下载,,也可以下载Hex文件, 自己买的这种,,,, 其实就是SWD下载模式 安装驱动 所有用到的 链接:http://pan.baidu.com/s/1c10Twsg 密码:m4dx 先安装好驱动现在用软件下载 现在用这个软件下载Hex文件,,,安装步骤可以百度下 ST-Link可以软件下载,也可以下载Hex文件,,关键是比串口下载快,,省时
[单片机]
关于ST-Link下载<font color='red'>STM32</font><font color='red'>程序</font>的使用
stm32使用三片74HC595级联程序代码
/************************************************************************ Function: Read_74HC595 Description: 读取n片74HC595的输入数据 Calls: HC595_delay;GPIO_ResetBits;GPIO_SetBits; Data Accessed: 无 Data Updated: 无 Input: HC595x:用户使用的595端口,类型定义在74HC595.h中 ChipNum: 用户使用的595端口上连接的芯片个数 Outp
[单片机]
STM32四行【跳转程序】引申出来的几条重要知识点
1写在前面 上一篇文章《 STM32 IAP应用编程几个要点 》讲述的内容很多朋友都了解过,也都使用过ST官网提供的代码。但使用过的人有许多都没有深入了解,仅仅只是把代码下载到板卡中跑了一下而已(因为代码完全可以使用)。所以,很少有人研究其中细节的问题。 先看一下上图中四行跳转代码,接下来将围绕这四行代码拓展相关的内容。 2STM32是如何实现程序跳转的? 上图四行代码中有几个定义没有贴出来,下面一并贴出来: #define ApplicationAddress 0x8003000 typedef void (*pFunction)(void); pFunction Jump_To_Application; uint
[单片机]
<font color='red'>STM32</font>四行【跳转<font color='red'>程序</font>】引申出来的几条重要知识点

推荐帖子

怎么理解这个电路?
各位老师请教:这是个什么电路?U4、U5是光耦么?怎么理解这个电路怎么理解这个电路?两个N沟MOS管门极没有驱动门极的电源,如果U4U5是光耦,那么两个N沟MOS管不可能导通。所以,此电路不能工作。从两个N沟MOS管脚对脚串联于S1和S2之间,该电路可能是想要充当一个开关接入交流电路。但如前所述,两个MOS管不可能导通,所以不能起到开关作用。 工作肯定是能工作的,这是一个厂家的手册方案电路 【这是一个厂家的手册方案电路】既然是厂家的手册方案电路
Knight97538 电源技术
TDC-GP2与MSP430F413通讯C程序
//TDC-GP2与MSP430F413通讯C程序//========================================#includemsp430x43x.h#includemath.h//#includeheat_meter.h//========================================#defineInit_GP20x70//初始化TDC#defineStart_Cycle0x01//脉
fish001 微控制器 MCU
申请的LPC810开发板,晒照了。。。
LPC810开发板上个星期就到了,最近太忙了,没来得及研究。先晒出几张照片,见见太阳。。。很精致的一块小板子,第一眼看到那个10P的接口,我瞬间醉了,太小了,还好接口都留出来了,后续学习再接出来使用。。。希望对我学习NXPLPC1100系列的片子有帮助。。。申请的LPC810开发板,晒照了。。。中间那个是主控LPC810吗?感觉好小啊。是找我们周立功申请的吗??周立功--中国最大的NXP代理和服务商,可以为你提供一切有关NXP的应用设计等的支持
youyou_123 NXP MCU
buck变换器问题求助
本人新手,行用buck做一个电源充电器,电池内阻2欧左右,我先使用的一个2欧的电阻代替电池作为负载,但问题是变换器的输入电压直接就检测到开路了,输入电压被拉的很低,只有一两伏。如果换一个电阻大一点的(30欧),就不会检测到开路。请教大神这是怎么回事啊。buck变换器问题求助比较简单的方法是,最好串个电流表弄个可调负载,能否达到设计的电流值。楼主对电池内阻的理解不正确所致。如果等效的话,电池可以用一理想电池再加一个电阻。不能仅一个电阻等效完事。“直接就检测到开路了”是检测到短路吧?
华南 电源技术
关于Zigebee网络通信实验的一些问题请教
最近在学习Zigbee,看到网络通信试验里无论是祖波还是广播或者点播,都会配置这么一句话:Point_To_Point_DstAddr.endPoint=SAMPLEAPP_ENDPOINT;请问这个参数在组网中有什么作用呢?关于Zigebee网络通信实验的一些问题请教这个是用来建立网点的 能具体一点吗?刚入手不太理解 你用的是哪个平台? 网蜂的CC2530 链接:https://pan.baidu.com/s/11cy6TnxKNGGXj4jqUQeriQ
陈皮皮 RF/无线
【NUCLEO-WB09KE】开箱及开发环境测试
1、开发板介绍NUCLEO-WB09KE,其中核心MCUSTM32WB09KE为超低功耗ArmCortex-M0+MCU,运行频率64MHz,具有512KBFlash存储器、64KBRAM,支持BluetoothLE5.4。这个与ST公司推出的STM32WB的其它系列采用的是基于以64MHz运行的ArmCortex‐M4内核,该系列从结构上推断STM32WB0XX应该功耗要更低。Bluetooth低功耗5.4的传输距离更长,速度快的特点。我拿到手的STNUC
bigbat RF/无线
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved