Hi, after a quick look at your code I have observed that you have to replace logically OR (||) with bitwise OR(|) in the configuration of PORT B.
cool_kuba:
I have wrote a test application to my samsung E700 camera and it doesn’t work ( i can si continuously the same sign) And Dave wrote that it should send images without any configuration. Maybe somebody has a idea what is wrong. OR someone can share code with me please. Here is my not really sophisticated code. I repeat it is only test.
PA0…7-Data
PA8 Clock output (8Mhz)
PB2 – Reset
PB3- Enable
Rest is not needed for my application.
Here it is:
#include "stm32f10x.h"
#include “lcd4bit.h”
void RCC_Conf(void);
void GPIO_Conf(void);
void NVIC_Conf(void);
void delay(int del)
{
int i, tmp;
tmp = 9000*del;
for(i=0;i<tmp;i++);
}
int main(void)
{
uint8_t Odczyt=0, setki, dziesiatki, jednosci,i;
#ifdef DEBUG
debug();
#endif
RCC_Conf();
NVIC_Conf();
GPIO_Conf();
LCD_Init();
LCD_Clear();
GPIO_SetBits(GPIOB,GPIO_Pin_3);//wlacz kamerke
GPIO_ResetBits(GPIOB,GPIO_Pin_2); //reset
delay(100);
GPIO_SetBits(GPIOB,GPIO_Pin_2);
GPIO_SetBits(GPIOB,GPIO_Pin_3);//jeszcze raz wlacz jakby co
while (1)
{
for(i=0;i<4;i++ )
{
if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_7)) //odczyt bajtu danych (kurde jak inaczej)
Odczyt |= 0x80;
if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_6))
Odczyt |= 0x40;
if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_5))
Odczyt |= 0x20;
if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_4))
Odczyt |= 0x10;
if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_3))
Odczyt |= 0x08;
if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_2))
Odczyt |= 0x04;
if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1))
Odczyt |= 0x02;
if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0))
Odczyt |= 0x01;
/*setki=(Odczyt/100)+48 ;
Odczyt=Odczyt-setki*100;
dziesiatki=(Odczyt/10)+48;
Odczyt=Odczyt-dziesiatki*10;
jednosci=Odczyt+48;
LCD_SendData(setki);
LCD_SendData(dziesiatki);
LCD_SendData(jednosci); */
LCD_SendData(Odczyt);
LCD_SendData(' ');
delay(1000);
Odczyt=0;
}
LCD_Clear();
}
}
void RCC_Conf(void)
{
ErrorStatus HSEStartUpStatus;
// Reset ustawien RCC
RCC_DeInit();
// Wlacz HSE
RCC_HSEConfig(RCC_HSE_ON);
// Czekaj za HSE bedzie gotowy
HSEStartUpStatus = RCC_WaitForHSEStartUp();
if(HSEStartUpStatus == SUCCESS)
{
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
// zwloka dla pamieci Flash
FLASH_SetLatency(FLASH_Latency_2);
// HCLK = SYSCLK
RCC_HCLKConfig(RCC_SYSCLK_Div1);
// PCLK2 = HCLK
RCC_PCLK2Config(RCC_HCLK_Div1);
// PCLK1 = HCLK/2
RCC_PCLK1Config(RCC_HCLK_Div2);
// PLLCLK = 8MHz * 9 = 72 MHz
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
// Wlacz PLL
RCC_PLLCmd(ENABLE);
// Czekaj az PLL poprawnie sie uruchomi
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
// PLL bedzie zrodlem sygnalu zegarowego
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
// Czekaj az PLL bedzie sygnalem zegarowym systemu
while(RCC_GetSYSCLKSource() != 0x08);
}
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
}
void GPIO_Conf(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3| GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //zegar
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
RCC_MCOConfig(RCC_MCO_HSE);//wystawienie sygnalu zegarowego HSE dla kamerki
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|| GPIO_Pin_2; //EN oraz reset
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
Thats all : ) bye !