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-17 11:26

解决STM32每次下载程序都需要断电
Stm32的启动模式由BOOT0和BOOT1进行配置,在下载模式下我们需要讲BOOT0配置成0电平,但往往忽略了BOOT1。 一般开发板厂家都会把BOOT0和BOOT0都做成可配置的。 问题就是在下载程序的时候只在BOOT0上接了跳线帽讲其接地,但是BOOT1确由其悬空着,因此每次下载都必须重新上电才能被下载器认可,后来将BOOT1用跳线帽接到高电平后,问题成功解决,每次下载前只需要按下复位按键就可以了。
[单片机]
解决<font color='red'>STM32</font>每次下载<font color='red'>程序</font>都需要断电
STM32 IAP 无法运行用户程序的解决方法
IAP程序: 主要是设置用户程序的起始地址 APPLICATION_ADDRESS,如0x08004000,通过外设把用户代码写入FLASH的用户区。满足条件后,跳转至用户区起始地址。 解释一下跳转部分代码: /* Test if user code is programmed starting from address APPLICATION_ADDRESS */ if (((*(__IO uint32_t*)APPLICATION_ADDRESS) & 0x2FFE0000 ) == 0x20000000)// 判断栈顶地址是否在0x2000 0000 - 0x2000 2000之间 // 通过判断栈顶地址值是否正确来判
[单片机]
<font color='red'>STM32</font> IAP 无法运行用户<font color='red'>程序</font>的解决方法
STM32全局变量占用程序存储空间吗
全局变量是否占用最终程序的存储空间,这个问题其实早在我们学习C语言的时候就已经告诉我们答案了。我隐约记得初学C语言的时候,书本上告诉我们: 全局自动变量 保存在读写数据段 全局静态变量 保存在读写数据段 全局常量 保存在只读数据段 局部自动变量 保存在栈空间里的 而我们在做单片机程序的时候,由于都是用的C编程,所以数据的存储也是一样的。上面的读写数据段在单片机里就是RW-data段,上面的只读数据段在单片机里就是RO-data,还有一个零初始化数据段ZI-data段(由此可见,RW-data加上ZI-data就是总共要分配的RAM空间大小),最后一个Code段就不用介绍了,大家都明白。 那么究竟一个STM32程序编译链接完
[单片机]
<font color='red'>STM32</font>全局变量占用<font color='red'>程序</font>存储空间吗
如何基于Keil、STM32用C++编写流水灯程序
通常来说,在单片机上编程,要么汇编,要么C语言,而用C++进行开发的很少,那么究竟能不能用C++开发单片机呢? 答案肯定是可以的,下面讲讲基于Keil、STM32,用C++编写流水灯程序的一些内容。 1 为什么很少用C++开发单片机 不知道大家对面向过程和面向对象的理解有多少? C语言是面向过程的语言,C++是面向对象的编程语言。结合本文来说,面向过程相比面向对象的编程,生成代码量(bin文件)更小,运行效率更高。 所以,C语言相比C++具有更小代码量(bin文件)、更快的运行速度。 当然,这里是C相对C++而言。其实,汇编相对C而言,具有更小代码量和更快的运行速度。可以参看文章:用 汇编 和 C语言 写流水灯程序有什么不
[单片机]
关于stm32的所有下载程序方法
1.使用isp下载 1.使用isp下载的时候保证BOOT0=1,BOOT1=0,这样进入系统系统存储器启动(为了避免有串口输出等程序在flash当中运行扰乱下载),这种模式启动的程序通过串口下载进去,使用Flash Loader Demonstrator下载 BOOT1=x BOOT0=0 从用户闪存flash启动,这是正常的工作模式。 BOOT1=0 BOOT0=1 从系统存储器启动,这种模式启动的程序功能由厂家设置。 BOOT1=1 BOOT0=1 从内置SRAM启动,这种模式可以用于调试 2.使用isp工具的时候当按下复位键才能进入系统存储模式,才能编程flash芯片,编程完成之后马上进入flash启动,此时再次
[单片机]
基于STM32驱动CC1101的程序分析 浅谈CC1101调试
首先明确:CC1101是通过SPI与MCU进行通信的。根据从TI官方上获得CC1101驱动,直接先移植SPI部分,STM32F103提供了SPI1和SPI2两条SPI总线,可自行选择,对于SPI的移植,直接参考STM32开发板上关于通过SPI操作Flash示例代码,对于SPI的配置与TI提供的驱动代码里的SPI配置保持一致。SPI移植完成之后,接上CC1101射频模块,测试SPI是否能正常通信,主要通过向CC1101任意可读可写寄存器写一个任意值,然后再读出该寄存器里的值,通过串口打印出该值,通过以上操作判断SPI是否正常通信,SPI移植是否成功。当然,这里使用到了串口,所以需要同时将串口的代码实现,同样参考串口实例。 其次,
[单片机]
stm32 升级程序方案
STM32芯片自带固化的ISP程序,在芯片上电的时候会检查BOOT0 BOOT1电平状态,如果 BOOT0=1 BOOT1=0 则会进入自带的ISP程序,基本可以满足程序升级需要。 但是如何进入这个模式,是一个问题,网上有人使用串口的握手信号来控制,但是这样会超过3条线(RX TX GND)。 昨天测试了一个方法,上位机发出一个指令,STM32用户自己的程序解析后,利用自己的IO口,控制一个简单的延时电路来拉高BOOT0,然后芯片重新启动,则进入ISP。刷新完成后,跳入用户程序运行,控制权交回用户程序。 程序中设置PB8为 ISP_DRV ,推挽输出;输出一定时间后,充满电容后,可以使用NVIC_SystemReset(
[单片机]
STM32中ucos的编写程序
* Includes ------------------------------------------------------------------*/ #include config.h /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ //定义 堆栈大小 //#define TASK_STK_SIZE 128 #define TASK_STK_SIZ
[单片机]

推荐帖子

请帮忙给个锂离子电池充电的芯片型号
最近在做个要用到锂离子电池的东西,要做个充电芯片,在网上找了很多,max1679,max468什么的,但实际上根本在市场上买不到!(我南京的)有没有做过这个的大侠给指个明路啊!谢谢啦请帮忙给个锂离子电池充电的芯片型号TI的BQ系列的MAX芯片确实不好买到哦,非常谢谢,我回去查查已经查到了南京有BQ2057谢谢
ljyfunkey 嵌入式系统
请教一下关于声电转换的问题
如题,最近想做个关于声电转换的小项目,但是不知道哪有相关电路或者是现成功能的声电转换芯片,知道的请帮帮忙!不请教一下关于声电转换的问题没接触过,我觉得可以借助一下麦克的电路这样的很多啊。咪头就是这样的声电转换器。咪头也称驻极体电容传声器。网上搜搜有好多现成的电路,参考一下。顺便接分咯找一个声电传感器不就可以了。多谢了,帮大忙了
cong0018 嵌入式系统
晶体滤波器
晶体滤波器应该如何设计、调试,使得带宽、频率符合要求呀(在我的认知里,多个晶体谐振器通过电路组成一个晶体滤波器)。假如想要一批中心频率4MHz的滤波器3db带宽10khz的滤波器。请问应该如何实现从设计到量产的过程?晶体滤波器1、先进行电路仿真。仿真可以用MATLAB或者multism软件,直至仿真结果可行2、仿真结果可行后,实物焊接,对比焊接结果与仿真结果3、如果实物结果可以,就可以转为PCB量产,设计PCB时注意高频板子的电磁干扰问题中心频率4MHz的滤波器3db带
我是小六啊 RF/无线
怎么翻译成代码??????????
@1000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF
Rickystandup 微控制器 MCU
请问如何将hive-based机制在CF卡上运行?
Catalog加進RamandRomFilesystemFATFilesystemHive-BasedRegistryPlatform.reg加入;HIVEBOOTSECTIONSYSTEMHIVE=DocumentsandSettings\\\\system.hvPROFILEDIR=DocumentsandSettings
lbx_00 嵌入式系统
【2024 DigiKey 创意大赛】家庭环境检测器-完成贴
家庭环境检测器作者:白菜虫虫一、作品简介作品照片:作品功能介绍:本作品旨在实现家庭智能环境检测,实现的主要功能有如下几点:1.使用大尺寸LCD屏开发板结合LVGL制作精美界面,实时显示家庭环境质量。2.使用BME680等传感器获取家庭环境数据,并通过网络传输到LCD屏幕开发板上实时显示。3.通过网络获取天气预报信息并在LCD屏幕开发板上实时显示。4.根据事先设定的条件,控制其他家庭智能设备,调节室内温度,湿度等等环境条件。物料清单:
白菜虫虫 DigiKey得捷技术专区
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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