新手上路
- 积分
- 45
- 金钱
- 45
- 注册时间
- 2016-10-6
- 在线时间
- 23 小时
|
10金钱
如图:
黄色CS,蓝色为MOSI,紫色SCK,MOSI为PA7-32引脚,此引脚只接了示波器,默认上拉,示波器中可以看到蓝色高电平波形有丁点变化。之前用SPI2已经调试通过了,只是用到的SPI通讯太多,两个都需要调通。MISO可以闲置不用。
PA7引脚是不是坏掉了??
void DAC_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
SPI_InitTypeDef SPI_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);//使能 GPIOA 时钟
RCC_APB1PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);// 使能 SPI1 时钟
//GPIOA5,6,7 初始化设置: 复用功能输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;//PA5,6,7
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
GPIO_Init(GPIOA, &GPIO_InitStructure);// 初始化
//GPIOA4
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;//PA4
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//输出
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化
DAC_CS = 1;
//配置引脚复用映射
GPIO_PinAFConfig(GPIOA,GPIO_PinSource5,GPIO_AF_SPI1); //PA5 复用为 SPI1 SCK
GPIO_PinAFConfig(GPIOA,GPIO_PinSource6,GPIO_AF_SPI1); //PA6 复用为 SPI1 MISO
GPIO_PinAFConfig(GPIOA,GPIO_PinSource7,GPIO_AF_SPI1); //PA7 复用为 SPI1 MOSI
//这里只针对 SPI 口初始化
//RCC_APB1PeriphResetCmd(RCC_APB2Periph_SPI1,ENABLE); //复位 SPI1
//RCC_APB1PeriphResetCmd(RCC_APB2Periph_SPI1,DISABLE); //停止复位 SPI1
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //设置 SPI 全双工
SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //设置 SPI 工作模式:主 SPI
SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b; //设置 SPI 的数据大小: 16 位帧结构
//串行同步时钟的空闲状态为 低 电平
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; //串行同步时钟的空闲状态为 低 电平
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; //数据捕获于第二个时钟沿
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //NSS 信号由软件件管理
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; //预分频 256
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //数据传输从 MSB 位开始
SPI_InitStructure.SPI_CRCPolynomial = 7; //CRC 值计算的多项式
SPI_Init(SPI1, &SPI_InitStructure); //根据指定的参数初始化外设 SPI1 寄存器
SPI_Cmd(SPI1, ENABLE); //使能 SPI1
SPI_DAC_SendByte(DAC_WTM); //[15-12]:1001 [11-0]:0000000000000 WTM模式DAC输出更新
delay_us(20);
SPI_DAC_SendByte(DAC_A_2V8);
delay_us(20);
}
void SPI_DAC_SendByte(u16 byte)
{
DAC_CS = 0;
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET); //发送缓存空时向下执行
SPI_I2S_SendData(SPI1, byte);
//while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET); //等待接收完
delay_us(150);
DAC_CS = 1;
delay_us(300);
}
|
-
-
|