- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用最新的 HAL 库而不是标准外设库。
我想读出BMA250E G-sensor的chip_id,但它不起作用。
aRxBuffer 的值始终保持在 0x00。但应该是0xf9!
我的代码有什么问题?
#include "stm32f4xx_hal.h"
#define I2Cx_SDA_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
#define I2Cx_SDA_PIN GPIO_PIN_9
#define I2Cx_SDA_GPIO_PORT GPIOB
#define I2Cx_SDA_AF GPIO_AF4_I2C1
#define I2Cx_SCL_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
#define I2Cx_SCL_PIN GPIO_PIN_6
#define I2Cx_SCL_GPIO_PORT GPIOB
#define I2Cx_SCL_AF GPIO_AF4_I2C1
#define I2Cx_CLK_ENABLE() __HAL_RCC_I2C1_CLK_ENABLE()
#define I2Cx_FORCE_RESET() __HAL_RCC_I2C1_FORCE_RESET()
#define I2Cx_RELEASE_RESET() __HAL_RCC_I2C1_RELEASE_RESET()
#define I2C_ADDRESS 0x18
static void SystemClock_Config(void);
uint8_t aTxBuffer[2],aRxBuffer;
int main()
{
HAL_Init();
SystemClock_Config();
I2C_HandleTypeDef I2cHandle;
I2cHandle.Instance = I2C1;
I2cHandle.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
I2cHandle.Init.ClockSpeed = 400000;
I2cHandle.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
I2cHandle.Init.DutyCycle = I2C_DUTYCYCLE_16_9;
I2cHandle.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
I2cHandle.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
I2cHandle.Init.OwnAddress1 = 0;
I2cHandle.Init.OwnAddress2 = 0;
HAL_I2C_Init(&I2cHandle);
aTxBuffer[0]=0x00;
HAL_I2C_Master_Transmit(&I2cHandle, I2C_ADDRESS,aTxBuffer, 1, 10000);
HAL_I2C_Master_Receive(&I2cHandle,I2C_ADDRESS|0x01 ,&aRxBuffer, 1, 10000);
HAL_Delay(1000);
}
static void SystemClock_Config(void)
{
RCC_ClkInitTypeDef RCC_ClkInitStruct;
RCC_OscInitTypeDef RCC_OscInitStruct;
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLM = 8;
RCC_OscInitStruct.PLL.PLLN = 360;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
RCC_OscInitStruct.PLL.PLLQ = 7;
HAL_RCC_OscConfig(&RCC_OscInitStruct);
RCC_ClkInitStruct.ClockType =
(RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK |
RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5);
}
void HAL_I2C_MspInit(I2C_HandleTypeDef *hi2c)
{
GPIO_InitTypeDef GPIO_InitStruct;
I2Cx_SCL_GPIO_CLK_ENABLE();
I2Cx_SDA_GPIO_CLK_ENABLE();
GPIO_InitStruct.Pin = I2Cx_SCL_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FAST;
GPIO_InitStruct.Alternate = I2Cx_SCL_AF;
HAL_GPIO_Init(I2Cx_SCL_GPIO_PORT, &GPIO_InitStruct);
GPIO_InitStruct.Pin = I2Cx_SDA_PIN;
GPIO_InitStruct.Alternate = I2Cx_SDA_AF;
HAL_GPIO_Init(I2Cx_SDA_GPIO_PORT, &GPIO_InitStruct);
}
void HAL_I2C_MspDeInit(I2C_HandleTypeDef *hi2c)
{
I2Cx_FORCE_RESET();
I2Cx_RELEASE_RESET();
HAL_GPIO_DeInit(I2Cx_SCL_GPIO_PORT, I2Cx_SCL_PIN);
HAL_GPIO_DeInit(I2Cx_SDA_GPIO_PORT, I2Cx_SDA_PIN);
}
最佳答案
首先,我建议您使用STMCube。它将为您设置时钟和 I2C 总线。
检查 HAL 函数返回的内容是非常好的做法。如果您没有 HAL_OK
,则表示出现了问题。
首先尝试 100KHz,然后增加到 400KHz。
设备的 I2C 地址是 0x18
(如果 SDO 接地,我认为是这样)。但在 HAL 驱动程序中,您必须定义:
#define I2C_ADDRESS (0x18<<1)
您想要做的是读取寄存器,因此不要使用HAL_I2C_Master_Receive
或HAL_I2C_Master_Transmit
,而是使用HAL_I2C_Mem_Read
或 HAL_I2C_Mem_Write
,如下所示:
#define REG_CHIP_ID 0x00
HAL_I2C_Mem_Read(&I2cHandle, I2C_ADDRESS, REG_CHIP_ID, I2C_MEMADD_SIZE_8BIT, &aRxBuffer, 1, 10000);
另外,请注意,HAL 负责处理地址的 R/W 位,因此您不需要执行以下操作:
I2C_ADDRESS|0x01
关于stm32 - 如何使用STM32CUBEF4 HAL库通过i2c读取传感器数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38230248/
我需要移植一个 bash 脚本,它使用已弃用的 HAL 工具,如 hal-get-property或 hal-find-by-capability去开发。 HAL声明 HAL 已合并到 udev,但我
我正在研究 Spring Data REST,特别是 HAL 浏览器。我一直在关注 http://docs.spring.io/spring-data/rest/docs/current/refere
Level 3例如,RESTful API 的功能自定义媒体类型,如 application/vnd.service.entity.v1+json。在我的情况下,我使用 HAL在我的 JSON 中提供
我在 PropertyNotified 信号期间从处理程序调用 org.freedesktop.Hal.Device 上的 GetProperty。我仅对已添加或更改的属性调用 GetProperty
我正在尝试理解另一位程序员编写的代码。它使用I²C通信以将数据写入 STM32 微 Controller 的 EEPROM。 一般来说我理解他的代码是如何工作的,但我不明白他为什么使用HAL_LOCK
我正在研究如何实现针对多个微 Controller 的自定义C++ HAL,这些微 Controller 可能具有不同的体系结构(ARM,AVR,PIC等),同时又保持良好的状态。 我继承了几个大型的
我正在做一个 C++(使用 cmake)嵌入式 HAL 层,并尝试添加一个特定于某些 MCU 的库。现在这里的问题是从上层访问库函数。 我的解决方案是使用该特定板的 cmake 文件来定义一个宏,在该
对于在 x86 硬件上运行的 Linux 操作系统,要在内核中调用作为 TCP/IP 驱动程序(对于 x86)的一部分的 TCP_listen(),用户空间客户端应用程序调用 listen() 接口(
跟随我的post我想知道驱动程序和 HAL 之间有什么区别? 最佳答案 从这里doc : 硬件硬件抽象层定义了相机服务调用的标准接口(interface),您必须实现该接口(interface)才能使
在Linux中,HAL提供硬件抽象,设备驱动也提供硬件抽象。你能解释一下两者之间的区别吗? 最佳答案 设备驱动程序在特定缓冲区和控制标志 block 位置与特定设备通信。硬件抽象层抽象出特定设备如何工
我在通过 USART 接收数据时遇到了一些麻烦。我真正想要实现的是,我可以通过 USART 接收没有特定长度(只有最大可能长度)的命令。所以我使用中断例程来检查接收到的每个字符,但不知何故我仍然无法实
我正在使用 Spring Boot 2 构建一个 API,而 Angular 6 客户端必须处理如下响应: { "_embedded" : { "userResourceList" : [
我有以下问题 我有 Spring 数据休息的基本配置(没什么特别的,没什么自定义的)。 使用 spring-data-rest-webmvc 2.0.0 RELEASE 和 spring-data-j
我试图在我的 stm32f4 发现上闪烁 LED。不知何故,它停留在延迟功能上。我已将 SysTick 中断优先级更改为 0 并添加了 IncTick() , GetTick()职能。我错过了什么?
干杯... 我知道它代表硬件抽象层,但它到底是做什么的?它是为 VB 等高级语言设计的与硬件通信吗? IN/OUT 指令是调用 HAL 例程还是通过 I/O 管理器直接与硬件的设备驱动程序通信? 提前
哪里可以找到 DirectX HAL 规范? 服用 this diagram正确 然后所有 GPU 供应商都必须编写他们的设备驱动程序,以便他们与 HAL 对话。 HAL 在哪里指定? MSFT 如何
我正在做一个需要设置简单 LCD 的项目。此 LCD 使用 'st7032i' 芯片来控制 LCD。 我想通过 I²C 接口(interface)控制 LCD。 作为 Controller ,我使用
我遇到了以下问题:我的电子板上有 2 个输入: #define TOR1_IN_uC_Port GPIOC #define TOR1_IN_uC_Pin GPIO_P
大家好,我正在尝试使用 stm32 HAL 库进行串行 rx 中断,但出现了我不知道的错误。 这是一个非常简单的程序。 PC 将字节提供给 stm32 板,stm32 将使用 rx 中断例程获取这些字
我正在尝试找到一种标记 USB 闪存设备的方法,以便我可以通过编程方式进行测试,而无需安装它或更改标签。 我是否可以修改设备的任何属性,而不会导致设备的行为/外观对用户而言有所不同? 运行 Ubunt
我是一名优秀的程序员,十分优秀!