单片机/MCU论坛
直播中

jf_73980386

3年用户 3经验值
擅长:EMC/EMI设计
私信 关注
[文章]

BH67F2472开发电路与第一个程序设计

1.前言

从事硬件开发近二十年,最近在医院做完体检后,医生看过体检单后告知我:我目前的血糖偏高。医生说造成这种病情的原因大多都是因为生活饮食不规律,缺少运动导致。同时医生叮嘱道,血糖高一定要控制好,否则会引发各种并发症。

添加图片注释,不超过 140 字(可选)

做了二十年牛马身体终于扛不住了,接下来的时间,我建立了规律的生活管理:每日三餐定时定量,减少碳水化合物摄入;每日进行60分钟的中等强度有氧运动。为实现血糖的动态监测,我还网购了一个家用的血糖仪,每天定时测量血糖数据。经过1个月的饮食控制和运动锻炼,血糖终于回归到了正常生理区间。

2.好奇

由于自己是一个硬件工程师,也是从事多年的仪器仪表行业,对这个每天用来测血糖的小仪器充满好奇,想看看这个“小家伙”的内部结构和电路,但是又怕拆开之后影响仪器的测量精度,犹豫了很久。后面还是耐不住好奇,心想:拆开看看,如果影响了测量精度就重新买一个。

说拆就拆,拆开之后直接惊掉了下巴,盯着电路板,看了好几遍,最终确认了一个事实:整个电路板只有一颗芯片。

添加图片注释,不超过 140 字(可选)

对于测血糖来说,需要完成微小的生物电化学信号测量,需要驱动段码液晶屏显示,需要检测按键实现用户交互,还需要测量温度和电池电量数据,这么复杂的功能居然通过一个芯片就能完成,真是神奇。特别是测量微小的生物电化学信号,由于信号非常小,是不能直接使用芯片ADC进行测量的,通常是要搭建外部的信号放大电路。

添加图片注释,不超过 140 字(可选)

于是我怀着忐忑的心情查阅了这个神奇的芯片资料,查到资料之后我便恍然大悟,原来这个芯片是 Holtek(合泰半导体)推出的一款专用于血糖仪的单片机BH67F2472,集成了LCD 驱动功能,集成了信号放大电路适用于血糖测量,整合度高、外部零件少,特别适用于小体积的LCD血糖仪。

添加图片注释,不超过 140 字(可选)

3.下载程序

根据电路和芯片手册,我发现仪器的制造商居然把芯片程序的下载口预留出来了,一个念头如野草般疯长:倘若购置相应的下载器,是否就能将自写的代码,注入这个奇特的芯片中呢?

添加图片注释,不超过 140 字(可选)

说干就干,我网购了一个Holtek的下载器,同时我又重新买了一个全新的血糖仪(用于我日常动态监测血糖),然后安装了下载器厂家提供的开发工具HT-IDE3000。

添加图片注释,不超过 140 字(可选)

由于没有找到BH67F2472的工程源码,但是我到找了BH67F2495(型号越接近代码越兼容),基于BH67F2495代码我写了一个BH67F2472的简单的GPIO控制程序。万事俱备开始下载,连接、上电、点击烧录……期待的火花瞬间被错误提示浇灭。多次尝试失败后,联系下载器厂家,厂家建议我用先升级下载器固件。反复折腾几次后,终于将这个简单的GPIO控制程序下载到了芯片中。

熟悉开发工具和下载器后,发现这款芯片不支持仿真,下载器确实也只有下载功能!在这种情况下程序开发的难度将会大幅增加,就像航船失去了灯塔的指引在暗礁丛中摸索前行。但好在电路板上预留了UART接口,可以通过UART输出调试信息提高调试效率。

4.电路原理图

虽然下载了GPIO控制程序下载到了芯片中,但是由于电路的引脚和程序没有对应,所以并没有实现什么实际效果。为了真正控制电路板上的外设,打破程序与硬件“不匹配”的僵局,我拿出出万用表,打开BH67F2495芯片官方技术手册中的引脚说明。我先将万用表调到通断检测档,逐个追溯电路外设与芯片引脚的连接情况。经过一段时间的细致排查,所有外设与芯片引脚的对应关系都标注完成,反推出了电路板的原理图。电路原理框图如下:

添加图片注释,不超过 140 字(可选)

5.第一个程序设计

得到原理图后,就可以通过程序控制电路板上的设备。第一个程序力求简单,最简单的程序莫过于GPIO控制程序(类似一个hello world),通过MCU的IO口PB6的电平驱动蜂鸣器,让蜂鸣器发出声音,值得注意的是蜂鸣器不像LED那样,通过固定的高电平来点亮LED,蜂鸣器需要一定频率(如1KHZ)的高低交替电平信号控制,电路框图如下:

添加图片注释,不超过 140 字(可选)

程序代码通过控制PB6的电平,实现蜂鸣器的驱动,让蜂鸣器发出声音。关键代码如下:

/**
*********************************************************************************************************
*                                            bh67f2472
*                                      (c) Copyright 2025-2035
*                                         All Rights Reserved
*
* [url=home.php?mod=space&uid=1455510]@file[/url]    : 
* @By      : liwei
* [url=home.php?mod=space&uid=644434]@version[/url] : V0.01
* 
*********************************************************************************************************
**/

/*
*********************************************************************************************************
Includes 
*********************************************************************************************************
*/
#include "BH67F2472.h"

/*
*********************************************************************************************************
Define
*********************************************************************************************************
*/
#define PIN_ModeOutput(p, n)        { _##p##c##n = 0;}
#define PIN_ModeInput(p, n)         { _##p##c##n = 1;}
#define PIN_OutputHigh(p, n)        { _##p####n = 1;}
#define PIN_OutputLow(p, n)         { _##p####n = 0;}
/*
*********************************************************************************************************
Typedef
*********************************************************************************************************
*/

/*
*********************************************************************************************************
Variables
*********************************************************************************************************
*/



/*
*********************************************************************************************************
Function 
*********************************************************************************************************
*/


/********************************************************************************************************
 初始化io
********************************************************************************************************/
void initialization(void)
{
    PIN_ModeOutput(pb,6);
}
/********************************************************************************************************
 设置IO输出
********************************************************************************************************/
void gpio_set(unsigned char cmd )
{
    if(cmd == 0)
    {
        _pb6 = 1;        //输出高电平         
    }
    else
    {
        _pb6 = 0;        //输出低电平        
    }
}
/********************************************************************************************************
 延时函数 单位为ms
********************************************************************************************************/
void delay_ms(unsigned long int ms)
{
    while(ms--)
        GCC_DELAY(2000);//主频8Mhz,执行一条指令为0.5us。一条指令周期等于四条机器周期——》 1/8Mhz * 4 = 0.5us
}
/********************************************************************************************************
时钟配置
********************************************************************************************************/
void oscillators_cfg(void)
{
    //选择内部时钟
    _fhs = 0;
    //系统时钟设置为8000000
    _hircc = 0x05;    
    // Wait HIRC Oscillator Stable
    while (!_hircf);    
}
/********************************************************************************************************
主函数
********************************************************************************************************/
void main(void)
{
    //配置系统时钟
    oscillators_cfg();
    //关闭看门狗
    _wdtc = 0b10101000;    
    //设置为输出
    initialization();          
    while(1)
    {
        gpio_set(1);    //输出高电平 
        delay_ms(10);    //延时10ms
        gpio_set(0);    //输出低电平
        delay_ms(10);    //延时10ms    
    }
}
/***********************************************END*****************************************************/

完成程序设计后,编译、上电、下载,屏息凝神,轻轻一点,“滴——”的一声清响,宣告着程序与硬件已经调试完成。

6.分享

完成GPIO这个最简单的程序设计后,觉得这个芯片非常有意思,后面又花了一段时间设计了7个demo程序,每个demo力求做到简单易懂。这7个demo程序分别是:ADC程序、按键程序、DAC程序、GPIO程序、LCD程序、定时器程序、串口通信程序。

添加图片注释,不超过 140 字(可选)

同时也详细的核对了原理图,并整理成Altium Designer 格式,电路板的原理图如下:

添加图片注释,不超过 140 字(可选)

后续将持续更新BH67F2472这个系列,感兴趣的小伙伴,希望获取资料的小伙伴,可以评论区留言或者私信作者。

更多回帖

发帖
×
20
完善资料,
赚取积分