基于STM8单片机的CMOS图像采集系统应用设计
address是图像传感器的地址+写操作符“0”,reg_address是图像传感器内部寄存器的地址,slave_read_address是图像传感器的地址+读操作符“1”*/
{
unsigned char val;
I2C_Start();//启动I2C总线,I2C_CR2寄存器最低位置l
I2C_SendDAdr(slave_address);//发送图像传感器的地址+写操作符“0”
I2C_SendDat(reg_address);//发送内部寄存器的地址
I2C_Start();//启动I2C总线,I2C_CR2寄存器最低位置1
I2C_SendDAdr(slave_read_address);//发送图像传感器的地址+读操作符“1”
vai=12C_RcvDat();//从I2C接口读取数据
I2C_stop();//释放I2C总线,I2C_CR2寄存器次低位置1
retunl val;
}
(2)读取图像传感器内部寄存器的值
unsigned char I2C_Main(unsigned char slave_address,unsigned charreg_address,unsigned char write_data)
{
/* slave_address是图像传感器的地址+写操作符“0”,reg_address是内部寄存器的地址,write_data是要写入寄存器的数据*/
I2C_Start();//启动I2C总线,I2C_CR2寄存器最低位置1
I2C_SendDAdr(slave_address);//发送图像传感器的地址+写操作符“0”
I2C_SendDat(reg._address);//发送内部寄存器的地址
I2C_SendDat(write_data);//发送内部寄存器要写入的数据
I2C_stop();//释放I2C总线,I2C_CR2寄存器次低位置1
}
3.2.3 图像数据的采集
单片机通过SPI协议采集CMOS图像传感器的图像数据。SPI总线是一种同步串行外设接口,允许MCU与各种外围接口器件以串行方式进行通信。SPI总线一般采用4根线:串行时钟线SCK、主机输入从机输出数据线MISO、主机输出从机输入数据线MOSI、低电平有效的使能信号线SS。因为在系统的SPI数据传输过程中,单片机只采集图像传感器的数据,没有向图像传感器的数据输出,所以系统选用SPl只接收模式,这样只需要一根串行时钟线SCK和一根主机输入从机输出数据线MISO即可,节省硬件资源。
SPI接口的最大特点是由主设备时钟信号的出现与否来决定主从设备之间的通信。在从设备被使能时,一旦检测到主设备的时钟信号,数据开始传输,时钟信号无效后,传输结束。在系统中,单片机作为主设备,图像传感器作为从设备,图像传感器在时钟的下降沿变数,单片机在时钟的上升沿采集数据,图像传感器接收单片机的时钟信号SPI协议的时序如图7所示。
图7 SPI总线的数据传送时序图
STM8单片机有专门的硬件SPI接口,因此可通过该接1:2采集图像数据。图像传感器SPI时钟输入引脚连接单片机的SPI_SCK口,图像传感器图像数据输出引脚连接单片机SPI_MISO口,片选SPI_CS引脚连接单片机的普通I/O口PD7。然后对硬件SPI的参数进行配置,主要包括时钟频率、工作模式、主从模式、空闲时候电平状态、触发边沿等,这些参数都可以通过单片机硬件SPI的内部寄存器的配置实现。SPI总线读取图像数据的流程如下:
unsigned char spinet_byte(void)
{
while(!(SPI_SR&0x02));//等待总线空闲
SPI_DR=Oxff;//产生时序信号硬件SPI在且仅在发送数据的时候才产生SCK时钟
while(!(SPI_SR &0x01));//等待数据接收完毕
return SPI_DR;//将接收到的数据返回
}
3.3 Flash模块软件设计
SST25VF020是一款2Mbit SPI Serial NOR型Flash芯片,在系统中作为图像存储器使用。该Flash通过SPI的串口接收指令和数据,支持3/4的SPI协议,其工作时序如图8所示。
图8 SST25VF020的工作时序图
从上图可以看出,CE#f氐电平使能芯片正常工作,该芯片在SCK的上升沿读入信号,在SCK下降沿的时候输出信号。STM8单片机有专门的硬件SPI接口,但是图像传感器也需要单片机的硬件sPI接口与之通信,所以系统设计了一种分时复用单片机硬件SPI接口的方式。CE#片选连接单片机的普通I/O口PD0,该I/O口在不同的时刻与图像传感器的片选PD7分别选中,如此,一个硬件SPI接口便可操作2个SPI设备。SPI时钟输入引脚连接单片机的SPI_SCK口,SI读人信号连接单片机的SPI_MOSI,SO输出信号连接单片机的SPI_MISO。硬件SPI配置与前文所述图像数据采集Sial一致。此外,与图像采集相比,在程序部分还要多加一个单片机输出信号函数。Flash模块主要功能函数如下:
void sst_send_byte(unsigned char byte)
{
while(!(SPI_SR&0x02));//等待总线空闲
SPI_DR=byte;//将要写入的数据byte存入SPI_DR
while(!(SPI_SR&0x01));//等待数据发送完毕完毕
tmp=SPI_DR;//清空接收缓冲区
void flashwrite_byte(unsigned long addr,unsigned char data)//向缓冲区l的指定位置(0—263)写入指定字节
}
write_en();//写使能命令
mss0();//片选端选中,低电平有效
send(0x02);//写命令
send((unsigned char)(addr>>send((unsi
STM8单片 相关文章:
- 电源设计小贴士 1:为您的电源选择正确的工作频率(12-25)
- 用于电压或电流调节的新调节器架构(07-19)
- 超低静态电流电源管理IC延长便携应用工作时间(04-14)
- 电源设计小贴士 2:驾驭噪声电源(01-01)
- 负载点降压稳压器及其稳定性检查方法(07-19)
- 电源设计小贴士 3:阻尼输入滤波器(第一部分)(01-16)