STM32学习总纲--基于STM32CubeMX

it2026-03-16  1

STM32学习总纲

STM32CubeMX下基本驱动的开发1. 调试第一步1. 1 不同型号芯片程序移植1.2 USB虚拟化串口1.3 GPIO的控制 2. STM32外设以及驱动开发2.1 IIC开发2.2 ADC开发2.4 待完善

STM32CubeMX下基本驱动的开发

1. 调试第一步

1. 1 不同型号芯片程序移植

https://blog.csdn.net/weixin_44479800/article/details/104125346 STM32F103ZET6程序向STM32F103C8T6移植

1.2 USB虚拟化串口

https://blog.csdn.net/chen1658137632/article/details/105759763 虚拟com口

1.3 GPIO的控制

HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET); //打开mos管,控制SYS的开关 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET); //关闭mos管,控制SYS的开关

2. STM32外设以及驱动开发

2.1 IIC开发

【吃透系列】STM32CubeMX使用之I2C通讯 https://www.bilibili.com/video/BV14i4y1s7BS?from=search&seid=12894291567517195161

A:读取数据

根据以上的经验以及分析,可以看到整个的代码如下操作

HAL_I2C_Mem_Read 内部参数代表的意义如下 &hi2c1--------------------------------使用的第几个IIC ADDR_BQ25892_Write----------器件的七位地址左移得到 1----------------------------------------器件内部第一个地址开始读 I2C_MEMADD_SIZE_8BIT------读取的数据大小8bit I2C_Buffer_Read-------------------读取到的数据 2-----------------------------------------连续读取多少位 50---------------------------------------50的时间以内,没有读取到则报错

//STM32 HAL 程序Read代码 HAL_I2C_Mem_Read(&hi2c1, ADDR_BQ25892_Write,1,I2C_MEMADD_SIZE_8BIT,I2C_Buffer_Read,2,50); //STM32 HAL 程序读子函数 void IIC_writeReg(uint8_t reg_add, uint8_t reg_dat) { uint8_t sendbuf[2]; sendbuf[0] = reg_add; sendbuf[1] = reg_dat; HAL_I2C_Master_Transmit(&hi2c1 , ADDR_BQ25892_Write, sendbuf ,2 ,10); }

在main函数中使用函数

//在01的位置上写入函数01 //地址在子函数中已经添加 IIC_writeReg(0x01,0x01);

拓展 1.写的时候,把8bit,中的固定位写,不全部写其内部信息

实现方式: 1.读出之前的数据, 2.在读出的数据上,增加需要更改的数据 3.将计算完的数据写回IIC的寄存器。

2.2 ADC开发

//先写一个子程序 //这个控制的是ADC2,如果是其他的ADC则需要更改 HADC2 这个值 //ch(1-6Chnnal),times(read times) uint32_t ADC_Get_Average(uint8_t ch,uint8_t times) { ADC_ChannelConfTypeDef sConfig; //????? uint32_t value_sum=0; uint8_t i; switch(ch) //??ADC?? { case 1:sConfig.Channel = ADC_CHANNEL_1;break; case 2:sConfig.Channel = ADC_CHANNEL_2;break; case 3:sConfig.Channel = ADC_CHANNEL_3;break; case 4:sConfig.Channel = ADC_CHANNEL_4;break; case 5:sConfig.Channel = ADC_CHANNEL_5;break; case 6:sConfig.Channel = ADC_CHANNEL_6;break; } sConfig.SamplingTime = ADC_SAMPLETIME_239CYCLES_5; //????239.5?? sConfig.Rank = 1; HAL_ADC_ConfigChannel(&hadc2,&sConfig); for(i=0;i<times;i++) { HAL_ADC_Start(&hadc2); //???? HAL_ADC_PollForConversion(&hadc2,30); //?????? value_sum += HAL_ADC_GetValue(&hadc2); //?? HAL_ADC_Stop(&hadc2); //???? } return value_sum/times; // }

在main函数中添加

//Vbat_V 就是ADC读取到的值 Vbat_V = ADC_Get_Average(4,4); //得到电压,不准确 Vbus_V = ADC_Get_Average(3,4); //得到电压

2.4 待完善

SPI的开发I2S音频的开发HDI设备的开发USB audio的开发定时器/看门狗/PWM
最新回复(0)