STM32F030F4P6 IIC HAL库驱动CH455G

STM32F0系列单片机IO口没有位带操作,仿位带比较浪费资源,不太想用模拟IIC。

HAL库的IIC操作做还是很方便的,是24C02之类的EEPROM很好用,本文主要介绍使用HAL库的IIC驱动沁恒的CH455G数码管驱动器。

1.STM32CubeMX部分配置

这部分没有特别的地方,常规设就行

2. CH455G驱动代码

这一部分h文件引用了沁恒提供的代码

CH455G.h

#ifndef __CH455G_H
#define __CH455G_H

#include "main.h"
#include "stdint.h"

// 设置系统参数命令
#define CH455_BIT_ENABLE    0x01        // 开启/关闭位
#define CH455_BIT_SLEEP        0x04        // 睡眠控制位
#define CH455_BIT_7SEG        0x08        // 7段控制位
#define CH455_BIT_INTENS1    0x10        // 1级亮度
#define CH455_BIT_INTENS2    0x20        // 2级亮度
#define CH455_BIT_INTENS3    0x30        // 3级亮度
#define CH455_BIT_INTENS4    0x40        // 4级亮度
#define CH455_BIT_INTENS5    0x50        // 5级亮度
#define CH455_BIT_INTENS6    0x60        // 6级亮度
#define CH455_BIT_INTENS7    0x70        // 7级亮度
#define CH455_BIT_INTENS8    0x00        // 8级亮度

#define CH455_SYSOFF    0x0400            // 关闭显示、关闭键盘
#define CH455_SYSON        ( CH455_SYSOFF | CH455_BIT_ENABLE )    // 开启显示、键盘
#define CH455_SLEEPOFF    CH455_SYSOFF    // 关闭睡眠
#define CH455_SLEEPON    ( CH455_SYSOFF | CH455_BIT_SLEEP )    // 开启睡眠
#define CH455_7SEG_ON    ( CH455_SYSON | CH455_BIT_7SEG )    // 开启七段模式
#define CH455_8SEG_ON    ( CH455_SYSON | 0x00 )    // 开启八段模式
#define CH455_SYSON_4    ( CH455_SYSON | CH455_BIT_INTENS4 )    // 开启显示、键盘、4级亮度
#define CH455_SYSON_8    ( CH455_SYSON | CH455_BIT_INTENS8 )    // 开启显示、键盘、8级亮度

// 加载字数据命令
#define CH455_DIG0        0x1400            // 数码管位0显示,需另加8位数据
#define CH455_DIG1        0x1500            // 数码管位1显示,需另加8位数据
#define CH455_DIG2        0x1600            // 数码管位2显示,需另加8位数据
#define CH455_DIG3        0x1700            // 数码管位3显示,需另加8位数据

// CH455接口定义
#define        CH455_I2C_ADDR        0x40            // CH455的地址
#define        CH455_I2C_MASK        0x3E            // CH455的高字节命令掩码


#define BCD_decode_DP   0x0080
#define BCD_decode_NG   0x0040
//extern const uint8_t BCD_decode_tab[0x10];

void CH455G_Write(uint16_t cmd);
void CH455G_Init(void);
void CH455G_Display(short data);

#endif

CH455.C

#include "CH455G.h"
#include "math.h"
volatile const uint8_t BCD_decode_tab[0x10] = { 0X3F, 0X06, 0X5B, 0X4F, 0X66, 0X6D, 0X7D, 0X07, 0X7F, 0X6F, 
                                                       0X77, 0X7C, 0X58, 0X5E, 0X79, 0X71 };//BCD

void CH455G_Write(uint16_t cmd)
{
  uint8_t data1=0;
  uint8_t data2=0;
  data1 = ((uint8_t)(cmd>>7)&CH455_I2C_MASK)|CH455_I2C_ADDR;
  data2 = (uint8_t)(cmd & 0x00ff);
  HAL_I2C_Master_Transmit(&hi2c1,data1,&data2,1,1000);
  __NOP();
}  
                                     
void CH455G_Init(void)
{
  CH455G_Write( CH455_SYSON );// 开启显示和键盘,8段显示方式
  delay_ms(10);
  CH455G_Write( CH455_SYSON_8 );    // 8级亮度显示
}

void CH455G_Display(short data)
{
  uint8_t encode[4]={0};
  
  if(data<0)
  {
    //data = 0-data;
    data = ~(data-1);
    encode[1] = (data % 1000) / 100;
    encode[2] = (data % 100) / 10;
    encode[3] = data % 10;
    //发显示数据
    CH455G_Write( CH455_DIG0 | BCD_decode_NG );    
//    CH455G_Write( CH455_DIG1 | BCD_decode_tab[encode[1]] ); 
//    CH455G_Write( CH455_DIG2 | BCD_decode_tab[encode[2]] | BCD_decode_DP); 
//    CH455G_Write( CH455_DIG3 | BCD_decode_tab[encode[3]] ); 
  }
  else
  {
    encode[0] = data / 1000;
    encode[1] = (data % 1000) / 100;
    encode[2] = (data % 100) / 10;
    encode[3] = data % 10;
  
    //发显示数据
    CH455G_Write( CH455_DIG0 | BCD_decode_tab[encode[0]] );    
//    CH455G_Write( CH455_DIG1 | BCD_decode_tab[encode[1]] ); 
//    CH455G_Write( CH455_DIG2 | BCD_decode_tab[encode[2]] | BCD_decode_DP); 
//    CH455G_Write( CH455_DIG3 | BCD_decode_tab[encode[3]] ); 
  }
    CH455G_Write( CH455_DIG1 | BCD_decode_tab[encode[1]] ); 
    CH455G_Write( CH455_DIG2 | BCD_decode_tab[encode[2]] | BCD_decode_DP); 
    CH455G_Write( CH455_DIG3 | BCD_decode_tab[encode[3]] ); 
}
 

3. 特别说明

CH455G也有一个设备地址,但是这个地址与24C02不一样,如果用模拟IIC写可以16位依次写入,但是使用HAL库使用

HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout)

就需要将指令拆分,16位指令部分拆分为高8为与低八位,

  data1 = ((uint8_t)(cmd>>7)&CH455_I2C_MASK)|CH455_I2C_ADDR;
  data2 = (uint8_t)(cmd & 0x00ff);

HAL_I2C_Master_Transmit(&hi2c1,data1,&data2,1,1000);

将data1作为DevAddress,data2作为数据部分,长度size设为1。

至此就能往CH455G写数据了

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: STM32F4是意法半导体公司生产的一款32位嵌入式微控制器系列,具有高性能和低功耗的特点。STM32F4系列微控制器集成了许多外设模块,其中包括I2C(Inter-Integrated Circuit)总线。 I2C总线是一种串行通信总线,允许不同的器件在同一总线上进行通信。它使用两根线路(SDA和SCL)来传输数据,适用于多点通信。 在STM32F4系列微控制器中,可以使用HAL(Hardware Abstraction Layer)库来操作I2C总线。HAL库为用户提供了一些方便的函数,使得在编写程序时可以简化配置和控制I2C总线的操作。 在使用HAL库进行I2C总线的操作时,首先需要初始化I2C总线的配置参数,如通信速率、从机地址等。然后,可以使用HAL库提供的函数来完成I2C的读写操作。例如,可以使用HAL_I2C_Master_Transmit函数向一个从设备发送数据,或者使用HAL_I2C_Master_Receive函数从一个从设备接收数据。 在进行I2C总线数据传输时,需要注意一些细节。例如,需要确认从设备的地址是否正确,是否收到了ACK信号等。如果在数据传输过程中遇到问题,可以通过检查错误标志来判断具体出了什么错误。 总的来说,通过使用STM32F4系列微控制器的HAL库,可以方便地对I2C总线进行操作,实现与其他外设的数据交互,为嵌入式系统的设计和开发提供了便利。 ### 回答2: STM32F4系列微控制器是STMicroelectronics推出的一款高性能32位ARM Cortex-M4处理器的微控制器。I2C(IIC)是一种通信协议,可用于芯片之间的短距离通信。HAL (Hardware Abstraction Layer)是一种抽象硬件层,用于隐藏底层硬件及其功能细节,使开发人员能够更容易地编写可移植的代码。因此,STM32F4 IIC HAL是一种用于STM32F4系列微控制器的硬件抽象层库,用于实现I2C通信协议。 STM32F4 I2C HAL库提供了一组函数,用于配置和控制I2C接口,以便在STM32F4微控制器上实现I2C通信。这些函数使用简单且一致的接口,使开发人员能够轻松地使用I2C功能。 使用STM32F4 I2C HAL库,开发人员可以进行以下操作: 1. 初始化I2C接口,设置通信速度和其他参数。 2. 发送和接收数据:可以发送字节、字和多字节数据,并接收从外设返回的数据。 3. 控制I2C总线:可以发送开始和停止条件,以及重启和禁用I2C总线。 4. 中断处理:可以在接收和发送完成时触发中断,并通过中断处理函数进行处理。 5. 错误处理:可以检测和处理传输过程中发生的错误,如ACK失败或总线忙。 总之,STM32F4 IIC HAL库为开发人员提供了一种方便且高效的方式来实现I2C通信协议,并简化了在STM32F4微控制器上使用I2C功能的开发过程。 ### 回答3: STM32F4是STMicroelectronics(意法半导体)公司生产的一款高性能微控制器产品系列,其中包含了IIC总线控制器。IIC,即Inter-Integrated Circuit,是一种串行通信协议,也被称为I2C。STM32F4系列的HAL(Hardware Abstraction Layer,硬件抽象层)提供了对IIC控制器的高级封装,使得开发者在使用IIC总线进行通信时更加方便、快捷。 在STM32F4系列中使用IIC通信时,首先需要初始化IIC控制器的硬件和引脚,并配置IIC的通信速度、地址等参数。HAL库提供了一系列IIC初始化和配置函数,通过调用这些函数可以快速设置IIC控制器的相关参数。 在进行IIC通信时,可以使用HAL库提供的函数进行读写操作,例如向设备写入数据,或从设备读取数据。HAL库中的IIC函数封装了底层的硬件驱动,提供了发送数据、接收数据、等待中断等功能,大大简化了通信过程。 另外,HAL库还提供了一些其他功能,例如IIC中断处理函数和DMA传输功能。通过使用中断处理函数,可以在IIC通信过程中及时处理中断事件,以提高实时性和可靠性。而使用DMA传输功能则可以减轻MCU的负担,实现高效的数据传输。 总之,STM32F4的HAL库为开发者提供了一套便捷、高效的IIC通信解决方案,大大简化了对IIC控制器的底层操作,使得开发者能够更方便地利用IIC总线进行各种外设的连接和通信。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江湖个人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值