开发工具入门:https://www.st.com.cn/resource/zh/user_manual/um1727-getting-started-with-stm32-nucleo-board-software-development-tools-stmicroelectronics.pdf
STM32 的集成开发环境:https://www.st.com.cn/zh/development-tools/stm32cubeide.html
STM32Cube 初始化码生成器(必须安装):https://www.st.com.cn/zh/development-tools/stm32cubemx.html
STM32CubeProgrammer 软件:https://www.st.com.cn/zh/development-tools/stm32cubeprog.html
要安装至少一个STM32Cube 初始化代码生成器(经过测试至少要在6.13版以上)SetupSTM32CubeMX-6.14.1-Win软件,可以使用MDK进行调试也可以使用STM32的集成开发环境(新版需要安装在win10,不兼容win7),需要安装stlink驱动。
https://www.st.com/en/embedded-software/stm32cubef4.html下载面向STM32f4系列的STM32Cube MCU软件包(包含HAL、底层API和CMSIS、文件系统、RTOS - 以及在各类意法半导体开发板上运行的示例)
如果使用keil需要在这个链接:https://www.keil.com/pack/Keil.STM32F4xx_DFP.3.0.0.pack下载keilTM3232f4支持包。
打开 STM32CubeMX,点击“New Project”,选择芯片型号,STM32f411re。自动生成代码:
缺失固件库,于是打开以下界面,点击对话框:
在这个链接https://www.st.com.cn/zh/embedded-software/stm32cubef4.html#get-software
下载固件库CUBEF4的 1.28版
在调试下载过程中还升级了stlink驱动:
找到原理图,查询OLED接线,将PA0接SDA PA1接SCL,PA4接VCC PB0接GND;
配置PC10作为INA219的SCL引脚,PC12作为INA219的SDA引脚
打开 STM32CubeMX,点击“New Project”,选择芯片型号,STM32f411re。在pinout界面设置PA0、PA1、PA4、PB0,将PA0和PA1设置为开漏输出,PA4、PB0、PC10、PC12设置为推挽输出,时钟保持默认状态,点击GENERATE CODE自动生成初始化代码:
自动生成代码,再将INA219文件夹拷贝到工程中:
在项目管理对话框中将文件添加到工程:
在头文件路径中添加OLED.h等
修改引脚功能代码如下:
void INA_IIC_INIT(void) //
{
/* GPIO Ports Clock Enable */
__HAL_RCC_GPIOC_CLK_ENABLE();
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_10|GPIO_PIN_12, GPIO_PIN_RESET);
/*Configure GPIO pins : PC10 PC12 */
GPIO_InitStruct.Pin = GPIO_PIN_10|GPIO_PIN_12;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_12, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_10, GPIO_PIN_SET);
}
void INA_IIC_SDA_OUT(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
/* GPIO Ports Clock Enable */
__HAL_RCC_GPIOC_CLK_ENABLE();
/*Configure GPIO pin Output Level */
// HAL_GPIO_WritePin(GPIOC, GPIO_PIN_12, GPIO_PIN_RESET);
/*Configure GPIO pins : PC10 PC12 */
GPIO_InitStruct.Pin = GPIO_PIN_12;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP ;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
}
void INA_IIC_SDA_IN(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
/* GPIO Ports Clock Enable */
__HAL_RCC_GPIOC_CLK_ENABLE();
/*Configure GPIO pin Output Level */
// HAL_GPIO_WritePin(GPIOC, GPIO_PIN_12, GPIO_PIN_RESET);
/*Configure GPIO pins : PC10 PC12 */
GPIO_InitStruct.Pin = GPIO_PIN_12;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLUP ;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);}
当然在调试过程中还有头文件修改,数据类型重定义等工作;在主程序中调用语句:
VQ=INA_GET_Current_MA();
VV=INA_GET_Voltage_MV();
可以检测电流、电压,调用OLED显示程序可以进行显示,调试下载观察到