完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
因为需要挂3个TLC2543,内部的2个SPI已用完,开始着手模拟SPI接口,但始终电压显示不正常,求各位大侠支招。
/***************宏定义********************/ #define TLC2543_CS 4 #define TLC2543_MISO 5 #define TLC2543_MOSI 2 #define TLC2543_CLK 3 #define TLC2543_CLK_3_PORT GPIOE //PE3 #define TLC2543_CLK_3_CLK RCC_APB2Periph_GPIOE #define TLC2543_CLK_3_PIN GPIO_Pin_3 #define TLC2543_CLK_3_H( ) GPIO_SetBits (TLC2543_CLK_3_PORT,TLC2543_CLK_3_PIN); #define TLC2543_CLK_3_L( ) GPIO_ResetBits(TLC2543_CLK_3_PORT,TLC2543_CLK_3_PIN); #define TLC2543_SO_3_PORT GPIOE //PE5 #define TLC2543_SO_3_CLK RCC_APB2Periph_GPIOE #define TLC2543_SO_3_PIN GPIO_Pin_5 #define TLC2543_SI_3_PORT GPIOE //PE2 #define TLC2543_SI_3_CLK RCC_APB2Periph_GPIOE #define TLC2543_SI_3_PIN GPIO_Pin_2 #define TLC2543_MOSI_3_H( ) GPIO_SetBits (TLC2543_SI_3_PORT,TLC2543_SI_3_PIN); #define TLC2543_MOSI_3_L( ) GPIO_ResetBits(TLC2543_SI_3_PORT,TLC2543_SI_3_PIN); #define TLC2543_CS_3_PORT GPIOE //PE4 #define TLC2543_CS_3_CLK RCC_APB2Periph_GPIOE #define TLC2543_CS_3_PIN GPIO_Pin_4 #define TLC2543_CS_3_H( ) GPIO_SetBits (TLC2543_CS_3_PORT,TLC2543_CS_3_PIN); #define TLC2543_CS_3_L( ) GPIO_ResetBits(TLC2543_CS_3_PORT,TLC2543_CS_3_PIN); /********************************* 模拟SPI初始化 ********************************/ void TLC2543_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(TLC2543_CLK_3_CLK|TLC2543_SI_3_CLK|TLC2543_SO_3_CLK, ENABLE); TLC2543_CS_3_H( ); TLC2543_CLK_3_L( ); GPIO_InitStructure.GPIO_Pin = TLC2543_CS_3_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(TLC2543_CS_3_PORT, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = TLC2543_SO_3_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;// 上位输入 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(TLC2543_SO_3_PORT, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = TLC2543_SI_3_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(TLC2543_SI_3_PORT, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = TLC2543_CLK_3_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(TLC2543_CLK_3_PORT, &GPIO_InitStructure); } void TLC2543_Send(u8 data) { u8 i; TLC2543_CS_3_L( ); TLC2543_CLK_3_L( ); TLC2543_MOSI_3_L( ); Delay_us(30); for(i=0;i<8;i++) { if(data&(0x80>>i)) {TLC2543_MOSI_3_H( );} else {TLC2543_MOSI_3_L( );} Delay_us(30); TLC2543_CLK_3_H( ); Delay_us(30); TLC2543_CLK_3_L( ); } Delay_us(30); TLC2543_CS_3_H(); } u32 TLC2543_Get( ) { u8 i; u32 data=0; TLC2543_CS_3_L( ); TLC2543_CLK_3_L( ); TLC2543_MOSI_3_L( ); Delay_us(30); for(i=0;i<12;i++) { if(GPIO_ReadInputDataBit(TLC2543_SO_3_PORT,TLC2543_SO_3_PIN)) data|=(0x800>>i); Delay_us(30); TLC2543_CLK_3_H( ); Delay_us(30); TLC2543_CLK_3_L( ); } Delay_us(30); TLC2543_CS_3_H( ); return data; } u32 Read_TLC2543(u8 chan) { u32 adc_data; chan <<= 4; chan |= 0x04; TLC2543_Send(chan); adc_data = TLC2543_Get( ); //adc_data = (u32)adc_data * BASE_V / ( 0x0FFF ); return adc_data; } |
|
相关推荐
1个回答
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1328 浏览 1 评论
1070 浏览 0 评论
936 浏览 0 评论
STM32F405驱动DS1302时钟模块,输出时间错乱该怎么排查?
5174 浏览 2 评论
stm32f405rgt6驱动DS1302ZN出现时间错乱问题
3974 浏览 1 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-13 13:53 , Processed in 0.820134 second(s), Total 78, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1390