BS8116A-3驱动程序(使用STM32--STM32cubemx)
2017-05-11 23:27
741 查看
最近在用BS8116A-3这块触摸芯片,查了一下他的技术文档,里面显示从机地址是0x50,但是用示波器测试是0xA0(有点坑,MD),幸好发现了,不然不知道得调试多久。感谢示波器。
由于如果用标准库函数要自己配置IIC之类的,比较麻烦,而且容易出错,所以我是使用STM32cubemx这个软件配置好IIC,(广告:强烈推荐使用STM32cuemx软件生成程序)
extern void Delayms(unsigned int c)// 普通的延时函数
{
unsigned char a, b;
for (;c>0;c--)
{
for (b=38;b>0;b--)
{
for (a=130;a>0;a--);
}
}
}
用STM32cubemx配置好之后就是直接在主函数写代码了,
int main(void)
{
/* MCU Configuration----------------------------------------------------------*/
float values;
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
uint8_t GetData1[5]={0};//或者的按键值存在这个数组
uint8_t GetData2[5]={0x08}//要发送的字节:0x08;
/* Configure the system clock */
SystemClock_Config();
/* Initialize all configured peripherals */
MX_GPIO_Init();
// MX_ADC_Init();
MX_I2C1_Init();
MX_USART1_UART_Init();
while (1)
{
if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_12)==0)//我自己的单片机连接BS8116A-3的中断引脚,用于触发!
{
HAL_I2C_Master_Transmit(&hi2c1,0xa0,GetData2,1,50);
HAL_I2C_Master_Receive(&hi2c1,0xa0, GetData1,2,50);
HAL_UART_Transmit(&huart1, GetData1, 2, 50);//将结果输出到串口调试助手上,便于测试
Delayms(200);
}
}
/* USER CODE END 3 */
}
至于这个主函数里面的HAL_I2C_Master_Transmit(&hi2c1,0xa0,GetData2,1,50)函数可不是直接用的,要修改里面的库,路径是在stm32l1xx_hal.c。原因是如果你有看技术手册你应该知道单片机发送数据给触摸芯片后是不能有stop停止位的,所以这个函数我们要把他里面的
/* Generate Stop */
// SET_BIT(hi2c->Instance->CR1, I2C_CR1_STOP);
上面的这一句和我一样所示注释掉,函数里面总共有两个这个SET_BIT(hi2c->Instance->CR1, I2C_CR1_STOP)函数,第一个不用注释,注释第二个,注释完后下下句有句hi2c->Mode = HAL_I2C_MODE_NONE;要修改成hi2c->Mode = HAL_I2C_MODE_MASTER;
接下来是修改HAL_I2C_Master_Receive(&hi2c1,0xa0, GetData1,2,50)这个函数里面的内容了,直接把
/* Wait until BUSY flag is reset */
// if(I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BUSY, SET, I2C_TIMEOUT_BUSY_FLAG, tickstart) != HAL_OK)
// {
// return HAL_BUSY;
// }
然后调试应该没问题,需要的朋友们可以使用程序试试,不行的话可联系QQ:593534964进行交流
由于如果用标准库函数要自己配置IIC之类的,比较麻烦,而且容易出错,所以我是使用STM32cubemx这个软件配置好IIC,(广告:强烈推荐使用STM32cuemx软件生成程序)
extern void Delayms(unsigned int c)// 普通的延时函数
{
unsigned char a, b;
for (;c>0;c--)
{
for (b=38;b>0;b--)
{
for (a=130;a>0;a--);
}
}
}
用STM32cubemx配置好之后就是直接在主函数写代码了,
int main(void)
{
/* MCU Configuration----------------------------------------------------------*/
float values;
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
uint8_t GetData1[5]={0};//或者的按键值存在这个数组
uint8_t GetData2[5]={0x08}//要发送的字节:0x08;
/* Configure the system clock */
SystemClock_Config();
/* Initialize all configured peripherals */
MX_GPIO_Init();
// MX_ADC_Init();
MX_I2C1_Init();
MX_USART1_UART_Init();
while (1)
{
if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_12)==0)//我自己的单片机连接BS8116A-3的中断引脚,用于触发!
{
HAL_I2C_Master_Transmit(&hi2c1,0xa0,GetData2,1,50);
HAL_I2C_Master_Receive(&hi2c1,0xa0, GetData1,2,50);
HAL_UART_Transmit(&huart1, GetData1, 2, 50);//将结果输出到串口调试助手上,便于测试
Delayms(200);
}
}
/* USER CODE END 3 */
}
至于这个主函数里面的HAL_I2C_Master_Transmit(&hi2c1,0xa0,GetData2,1,50)函数可不是直接用的,要修改里面的库,路径是在stm32l1xx_hal.c。原因是如果你有看技术手册你应该知道单片机发送数据给触摸芯片后是不能有stop停止位的,所以这个函数我们要把他里面的
/* Generate Stop */
// SET_BIT(hi2c->Instance->CR1, I2C_CR1_STOP);
上面的这一句和我一样所示注释掉,函数里面总共有两个这个SET_BIT(hi2c->Instance->CR1, I2C_CR1_STOP)函数,第一个不用注释,注释第二个,注释完后下下句有句hi2c->Mode = HAL_I2C_MODE_NONE;要修改成hi2c->Mode = HAL_I2C_MODE_MASTER;
接下来是修改HAL_I2C_Master_Receive(&hi2c1,0xa0, GetData1,2,50)这个函数里面的内容了,直接把
/* Wait until BUSY flag is reset */
// if(I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BUSY, SET, I2C_TIMEOUT_BUSY_FLAG, tickstart) != HAL_OK)
// {
// return HAL_BUSY;
// }
然后调试应该没问题,需要的朋友们可以使用程序试试,不行的话可联系QQ:593534964进行交流
相关文章推荐
- 使用MATLAB&simulink&stm32mat_target&stm32cubemx开发stm32
- Ubuntu下使用STM32CubeMX和SW4STM32进行开发
- TM1638八位数码管八按键驱动程序(stm32f103驱动,使用了stm32 3.5库)
- TM1638八位数码管八按键驱动程序(stm32f103驱动,使用了stm32 3.5库)
- 【STM32】使用STM32cubeMX的库读写FLASH数据
- [原创]浅谈如何使用gcc开发NT核心驱动程序
- 使用WinDbg和虚拟机调试Windows驱动程序
- [原创]浅谈如何使用gcc开发NT核心驱动程序
- 使用DriverStudio开发WDM设备驱动程序入门
- 使用WinDBG和VMware调试驱动程序
- 声卡故障:驱动程序已启用但尚未开始使用!!!(音量调节的地方为灰色)
- 弹出应用程序: 服务控制管理器 : 在系统启动时至少有一个服务或驱动程序产生错误。详细信息,请使用事件查看器查看事件日志
- [原创]浅谈如何使用gcc开发NT核心驱动程序
- 【转帖】使用WinDbg和虚拟机调试Windows驱动程序
- 理解和使用NT驱动程序的执行上下文
- 使用DriverStudio开发WDM设备驱动程序入门
- Windows CE 5.0:驱动程序---如何使用 CETK 测试驱动程序
- 【转帖】应用程序如何使用驱动程序
- 应用程序如何使用驱动程序
- JRun 使用 Connector/J JDBC 驱动程序连接 MySQL 数据库