完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
用107外接了4个SPI输入12位dac,MCP4921,调了好几天都没有输出,各位大神帮忙看下哪里有问题,拜谢!代码如下
// 引用外部头文件 #include #include "STM32f10x.h" #include "IOConfig.h" #include "stm32f10x_spi.h" void RCC_Configuration(void); void GPIO_Configuration(void); void SPI_Configuration(void); void SendData(int val) ; void GPIO_RemapConfig(void); void Delay(__IO uint32_t nCount); //通用接口配置 void GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOF, ENABLE); GPIO_InitStructure.GPIO_Pin = LED; //LED(RUN) 配置为通用推挽输出 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //口线翻转速度为50MHz GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = ALARM; // 蜂鸣器 GPIO_Init(GPIOE, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Pin = IO_TXD1; //USART1 TX GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = IO_RXD1; // USART1 RX GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; // 复用开漏输入 GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = IO_DAC1|IO_DAC2; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = IO_SCLK | IO_MOSI; //SPI端口初始化 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_SetBits(GPIOB, IO_SCLK); GPIO_SetBits(GPIOB, IO_MOSI); GPIO_InitStructure.GPIO_Pin = IO_MISO; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = IO_SPIFLASH_CS; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_SetBits(GPIOA, IO_SPIFLASH_CS); GPIO_InitStructure.GPIO_Pin = DAC3_NSS; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOE, &GPIO_InitStructure); GPIO_SetBits(GPIOE, DAC3_NSS); GPIO_InitStructure.GPIO_Pin = DAC4_NSS; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOE, &GPIO_InitStructure); GPIO_SetBits(GPIOE, DAC4_NSS); GPIO_InitStructure.GPIO_Pin = DAC5_NSS; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOE, &GPIO_InitStructure); GPIO_SetBits(GPIOE, DAC5_NSS); GPIO_InitStructure.GPIO_Pin = DAC6_NSS; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_SetBits(GPIOC, DAC6_NSS); } //重定向管脚 void GPIO_RemapConfig(void) { GPIO_PinRemapConfig(GPIO_Remap_SPI1, ENABLE); } //初始化时钟 void RCC_Configuration(void) { SystemInit(); /* Enable USART1, GPIOA, GPIOx and AFIO clocks */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_AFIO, ENABLE); /* SPI Periph clock enable */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1,ENABLE); } //SPI配置 void SPI_Configuration(void) { /* * SPI 单向输出(0,0)模式 * SPI 发送接收 8 位帧结构 * NSS软件控制 * 波特率预分频值为 4 * 数据传输从 MSB 位开始 */ SPI_InitTypeDef SPI_InitStructure; SPI_InitStructure.SPI_Direction = SPI_Direction_1Line_Tx; SPI_InitStructure.SPI_Mode = SPI_Mode_Master; SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; SPI_InitStructure.SPI_CPOL = 0; SPI_InitStructure.SPI_CPHA = 0; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4; SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_Init(SPI1, &SPI_InitStructure); /* 使能 SPI1 */ SPI_Cmd(SPI1, ENABLE); } //通过SPI1口发送一个数据,同时接受一个数据 void Delay(__IO uint32_t nCount) { for(; nCount != 0; nCount--); } void SendData(int val) //发送数据给DAC3 { unsigned char control=0x30; unsigned char lVal = val; unsigned char hVal = (val >> 8); GPIO_ResetBits(GPIOE, DAC3_NSS); while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET) {} SPI_I2S_SendData(SPI1, hVal|control); while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET) {} SPI_I2S_SendData(SPI1, lVal); GPIO_SetBits(GPIOE, DAC3_NSS); } int main(void) { RCC_Configuration(); GPIO_RemapConfig(); GPIO_Configuration(); SPI_Configuration(); while(1) { GPIO_SetBits(GPIOB, LED); Delay(0xFFFFFF); SendData(4000); Delay(0xFFFFFF); GPIO_ResetBits(GPIOB, LED); } } |
|
相关推荐
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
2234 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
2053 浏览 3 评论
4664 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
2197 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
2734 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 20:18 , Processed in 0.777107 second(s), Total 72, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号