我之前用STC15系列写SCCB程序,希望能实现读写OV7670寄存器,调试半个月一直没成果。只好转战STM32芯片,因为我用的是正点原子的0V7670带FIFO模块,有源代码。然后我就直接把正点原子的SCCB文件直接拷贝在我的工程下,还有相关的sys.c, delay.c 我只是单纯把接口改了,可是还是读不出寄存器的值。我的想法是把读出寄存器的值,然后串口发送给上位机,可是上位机接收的数据一直是0xff,(串口函数是没有问题的,我测试过)
以下是我的工程主要部分
#include"usart.h"
#include"delay.h"
#include"sccb.h"
#include"stm32f10x.h"
#include“sys.h”
int main()
{
u8 a;
USART1_Init_Config(115200);
delay_init();
SCCB_Init();
a=SCCB_RD_Reg(0x12);
USART1_SendData(a);
}
//以下是我把正点原子源码的sccb.c文件唯一改动的部分, 我只是把SDA和SCL接口分别改成PA.13和PB.0
void SCCB_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_SetBits(GPIOA,GPIO_Pin_13);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB,GPIO_Pin_0);
SCCB_SDA_OUT();
}
//以下是正点原子源码的sccb.h文件改动的部分,
#define SCCB_SDA_IN() {GPIOA->CRH&=0XFF0FFFFF;GPIOA->CRH|=0X00800000;}
#define SCCB_SDA_OUT() {GPIOB->CRH&=0XFF0FFFFF;GPIOB->CRH|=0X00300000;}
//IO2ù×÷oˉêy
#define SCCB_SCL PBout(0) //SCL
#define SCCB_SDA PAout(13) //SDA
#define SCCB_READ_SDA PAin(13)
#define SCCB_ID 0X42
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>