[OrangePi]生成镜像

1.下载 git clone https://gitee.com/orangepi-xunlong/opi-bkimg.git
2.进入当前目录下的 opi-bkimg
3.sudo ./opi-bkimg
4.生成img文件在/mnt文件夹

[STM32G4] ADC转换

LL_ADC_EnableIT_EOC(ADC1);
LL_ADC_StartCalibration(ADC1,LL_ADC_SINGLE_ENDED);
while(LL_ADC_IsCalibrationOnGoing(ADC1));
LL_ADC_Enable(ADC1);
LL_ADC_REG_StartConversion(ADC1);

————————

void ADC1_read(uint16_t *pusbuf)
{
LL_ADC_REG_StartConversion(ADC1);
while(LL_ADC_IsActiveFlag_EOC(ADC1) == 0);
pusbuf[0] = LL_ADC_REG_ReadConversionData10(ADC1);
while(LL_ADC_IsActiveFlag_EOC(ADC1) == 0);
pusbuf[1] = LL_ADC_REG_ReadConversionData10(ADC1);
}

[STM32] SPI EEPROM MODE0

SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_32;// 72000000 ~1MHZ
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(SPI3, &SPI_InitStructure);

[STM32] STM32F4XX 双ADC转换

void ADC_Configuration(void)
{
ADC_InitTypeDef ADC_InitStructure;
ADC_CommonInitTypeDef ADC_CommonInitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
DMA_InitTypeDef DMA_InitStruct;

// 使能DMA2时钟
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_ADC2, ENABLE);

DMA_StructInit(&DMA_InitStruct);
ADC_CommonStructInit(&ADC_CommonInitStructure);
ADC_StructInit(&ADC_InitStructure);

// 配置ADC通用设置
ADC_CommonInitStructure.ADC_Mode = ADC_DualMode_RegSimult; // 双ADC模式,规则同步
ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div2; // ADC时钟分频
ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_2; // DMA模式2
ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles; // 双ADC采样延迟
ADC_CommonInit(&ADC_CommonInitStructure);

// 配置ADC1
ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b; // 12位分辨率
ADC_InitStructure.ADC_ScanConvMode = ENABLE; // 扫描模式
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; // 单次转换模式
ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_Rising; // 上升沿触发
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T8_TRGO; // TIM8触发
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; // 数据右对齐
ADC_InitStructure.ADC_NbrOfConversion = 3; // 3个转换通道
ADC_Init(ADC1, &ADC_InitStructure);

// 配置ADC1的通道
ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 1, ADC_SampleTime_56Cycles); // 通道0
ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 2, ADC_SampleTime_56Cycles); // 通道1
ADC_RegularChannelConfig(ADC1, ADC_Channel_6, 3, ADC_SampleTime_56Cycles); // 通道2

// 配置ADC2
ADC_Init(ADC2, &ADC_InitStructure);

// 配置ADC2的通道
ADC_RegularChannelConfig(ADC2, ADC_Channel_7, 1, ADC_SampleTime_56Cycles); // 通道0
ADC_RegularChannelConfig(ADC2, ADC_Channel_14, 2, ADC_SampleTime_56Cycles); // 通道1
ADC_RegularChannelConfig(ADC2, ADC_Channel_15, 3, ADC_SampleTime_56Cycles); // 通道2

// 配置DMA2 Stream0(用于ADC1)
DMA_InitStruct.DMA_Channel = DMA_Channel_0;
DMA_InitStruct.DMA_PeripheralBaseAddr = (uint32_t)(&ADC->CDR); // 外设地址
DMA_InitStruct.DMA_Memory0BaseAddr = (uint32_t)(adc_buffer); // 内存地址
DMA_InitStruct.DMA_DIR = DMA_DIR_PeripheralToMemory; // 传输方向
DMA_InitStruct.DMA_BufferSize = 3; // 数据长度 = 3(32 位数据)
DMA_InitStruct.DMA_PeripheralInc = DMA_PeripheralInc_Disable; // 外设地址不递增
DMA_InitStruct.DMA_MemoryInc = DMA_MemoryInc_Enable; // 内存地址递增
DMA_InitStruct.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word; // 外设数据宽度 32 位
DMA_InitStruct.DMA_MemoryDataSize = DMA_MemoryDataSize_Word; // 内存数据宽度 32 位
DMA_InitStruct.DMA_Mode = DMA_Mode_Circular; // 循环模式
DMA_InitStruct.DMA_Priority = DMA_Priority_VeryHigh; // 高优先级
DMA_InitStruct.DMA_MemoryBurst = DMA_MemoryBurst_Single;
DMA_InitStruct.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;

//DMA_InitStruct.

DMA_Init(DMA2_Stream0, &DMA_InitStruct);

// 使能DMA2 Stream0中断
DMA_ITConfig(DMA2_Stream0, DMA_IT_TC, ENABLE);

// 使能DMA2 Stream0
DMA_Cmd(DMA2_Stream0, ENABLE);
// 使能ADC1和ADC2
ADC_Cmd(ADC1, ENABLE);
ADC_Cmd(ADC2, ENABLE);

ADC_DMACmd(ADC1, ENABLE);
// 8. 启动 ADC 软件触发转换(若配置为软件触发)
ADC_SoftwareStartConv(ADC1);

ADC_MultiModeDMARequestAfterLastTransferCmd(ENABLE);

// 配置DMA2 Stream0中断
NVIC_InitStructure.NVIC_IRQChannel = DMA2_Stream0_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

while (DMA_GetCmdStatus(DMA2_Stream0) != ENABLE);

}

[linux]设置网卡自动连接并设置固定IP

sudo nmcli connection add type wifi ifname wlx7822884b2787 con-name rtlwap ssid rtlwap
sudo nmcli connection modify rtlwap wifi-sec.key-mgmt wpa-psk
sudo nmcli connection modify rtlwap wifi-sec.psk mqdqxyg1qy
sudo nmcli connection modify rtlwap ipv4.addresses 192.168.16.7/24
sudo nmcli connection modify rtlwap ipv4.gateway 192.168.16.1
sudo nmcli connection modify rtlwap ipv4.dns “8.8.4.4,114.114.114.114”
sudo nmcli connection modify rtlwap ipv4.method manual
sudo nmcli connection modify rtlwap connection.autoconnect yes

sudo nmcli connection up rtlwap ifname wlx7822884b2787