完善资料让更多小伙伴认识你,还能领取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个回答
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
2255 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
2071 浏览 3 评论
4687 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
2215 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
2757 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-27 09:18 , Processed in 0.616628 second(s), Total 73, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号