DVP摄像头可以通过UART,IIC等进行摄像头内部通讯配置摄像头参数。

TM30红外摄像头

这款摄像头可以通过串口发送命令进行摄像头参数配置。

TM30 信号单片机引脚电气属性方向以 MCU 为准作用
控制 TXPA2USART2 AF7,上拉输出MCU 向 TM30 发配置命令
控制 RXPA3USART2 AF7,上拉输入MCU 接收 TM30 应答

初始化串口

USART_InitTypeDef serial = {0};
NVIC_InitTypeDef nvic = {0};
//开启时钟功能,复位USART2外设。
PeripheralEnable(PeripheralUSART2, true);
PeripheralReset(PeripheralUSART2);

//设置串口参数
serial.USART_BaudRate = 115200U; //波特率
serial.USART_WordLength = USART_WordLength_8b; //8位数据位
serial.USART_StopBits = USART_StopBits_1;// 1停止位
serial.USART_Parity = USART_Parity_No; //无校验
serial.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件流控
serial.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //串口模式,同时启用接收和发送
//初始化串口
USART_Init(USART2, &serial); 
USART_Cmd(USART2, ENABLE);

//设置串口引脚复用和电气属性:USART2复用,内部上拉,GPIO高速模式,使用较低驱动强度配置
IOConfigStruct pins = MakeIOConfig(IOModeAlternate, GPIO_AF_USART2,
                                       IOPullUp, IOSpeedHigh, IODriveLow);
IOSetup(PA2, pins);
IOSetup(PA3, pins);

//发送数据
void TM30_Uart_Write(const uint8_t *data, uint16_t length)
{
    uint16_t index;
    for (index = 0U; index < length; ++index) {
        while (USART_GetFlagStatus(TM30_UART, USART_FLAG_TXE) == RESET) {}
        USART_SendData(TM30_UART, data[index]);
    }
    while (USART_GetFlagStatus(TM30_UART, USART_FLAG_TC) == RESET) {}
}

//接收数据用到了环形队列
/*
* 	USART收到字节
*	→ 触发RXNE中断
*	→ 字节存入环形队列
*	→ 协议层之后慢慢读取
*/