example for for using the flir lepton on the stm32nucleo_401re
Dependencies: mbed
Diff: main.cpp
- Revision:
- 0:4065e63beba6
- Child:
- 1:dd6a90cf2191
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu Sep 18 05:27:49 2014 +0000 @@ -0,0 +1,157 @@ +#include "mbed.h" + +Serial pc(SERIAL_TX, SERIAL_RX); +SPI lepton_spi(SPI_MOSI, SPI_MISO, SPI_SCK); +DigitalOut spi_cs(SPI_CS); + +//DigitalOut myled(LED1); + +#define VOSPI_FRAME_SIZE (164) +uint8_t lepton_frame_packet[VOSPI_FRAME_SIZE]; +int lepton_image[80][80]; + +static void print_image_binary(void) +{ + int i; + int j; + + pc.putc(0xDE); + pc.putc(0xAD); + pc.putc(0xBE); + pc.putc(0xEF); + + for(i=0;i<60;i++) + { + for(j=0;j<80;j++) + { + while(pc.writeable() == 0); + pc.putc((lepton_image[i][j]>>8)&0xff); + while(pc.writeable() == 0); + pc.putc(lepton_image[i][j]&0xff); + wait_us(1); + } + } +} + +int lost_frame_counter = 0; + +int last_frame_number; +int frame_complete = 0; +int start_image = 0; +int need_resync = 0; +int last_crc; +int new_frame = 0; +int frame_counter = 0; + +void transfer(void) +{ + int i; + int frame_number; + + + spi_cs = 0; + for(i=0;i<VOSPI_FRAME_SIZE;i++) + { + lepton_frame_packet[i] = lepton_spi.write(0x55); + } + spi_cs = 1; + + //pc.printf("%x %x \n\r",lepton_frame_packet[0], lepton_frame_packet[1]); + + //for(i=0;i<VOSPI_FRAME_SIZE;i++) + //{ + // pc.printf("%x,",lepton_frame_packet[i]); + // } + //pc.printf("\n\r"); + + if(((lepton_frame_packet[0]&0xf) != 0x0f)) + { + if(lepton_frame_packet[1] == 0 ) + { + if(last_crc != (lepton_frame_packet[3]<<8 | lepton_frame_packet[4])) + { + new_frame = 1; + } + last_crc = lepton_frame_packet[3]<<8 | lepton_frame_packet[4]; + } + frame_number = lepton_frame_packet[1]; + if( (frame_number>0) && (frame_number<60)) + { + pc.printf("%d\n\r",frame_number); + } + + if(frame_number < 60 ) + { + lost_frame_counter = 0; + for(i=0;i<80;i++) + { + lepton_image[frame_number][i] = (lepton_frame_packet[2*i+4] << 8 | lepton_frame_packet[2*i+5]); + } + } + if( frame_number == 59) + { + frame_complete = 1; + last_frame_number = 0; + } + } + else + { + wait_us(10); + } + + lost_frame_counter++; + if(lost_frame_counter>1000) + { + need_resync = 1; + lost_frame_counter = 0; + + } + + if(need_resync) + { + pc.printf("resync\n\r"); + wait_us(185); + need_resync = 0; + } + + + if(frame_complete) + { + if(new_frame) + { + frame_counter++; + { + if(frame_counter%9 ==0) + { + //print_image_binary(); + } + pc.printf("print_image_binary\n\r"); + } + new_frame = 0; + } + + frame_complete = 0; + } +} + + +int main() +{ + + //pc.baud(9600); + pc.baud(115200); + //pc.baud(1000000); + pc.printf("Hello World !\n"); + lepton_spi.format(8,3); + lepton_spi.frequency(20000000); + spi_cs = 1; + + wait_us(185); + + while(1) + { + //myled = !myled; + transfer(); + } +} + \ No newline at end of file