打印
[蓝牙芯片]

【沁恒蓝牙SOC——CH579M篇】CH579M牛刀小试串口打印

[复制链接]
1254|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
2025蓝牙亚洲大会在深圳会展中心举行。本次大会吸引了超过3,400名业内人士、62余家顶尖展商及多家权威行业协会参与,共同见证了蓝牙™技术在人工智能、工业物联网、医疗健康等领域的突破性进展。。本次大会最引人注目的当属蓝牙™技术的最新创新突破。包括蓝牙信道探测、Auracast™广播音频和蓝牙™最新增强功能高吞吐量数据传输(HDT)、高分辨率无损音频、超低延迟HID以及更高频段等。

    蓝牙技术已经跃升至v6.1规格。2018 年,蓝牙技术联盟首次提出 LE Audio(低功耗音频) 技术框架,并引入广播音频等新特性。到如今,更多消费级设备(如智能手机、音箱、汽车)开始集成 Auracast™功能,生态逐步成熟,并与交通、零售、公共服务等行业合作,试点广播音频场景(如机场 / 车站语音导航、商场广告推送、博物馆导览等)。《2025年蓝牙市场最新资讯》数据显示,中国蓝牙IC销售量、智能手机年销售量分别占其全球总销量的50%。沁恒蓝牙芯片以高集成度、低功耗、高性价比为核心优势,广泛应用于物联网、消费电子、工业控制等领域。对于需要快速开发、成本控制严格的项目,沁恒蓝牙芯片是一个值得考虑的选择。

沁恒蓝牙产品特点:
1.多协议支持沁恒蓝牙芯片支持BLE(低功耗蓝牙)、经典蓝牙以及2.4G私有协议,部分芯片还集成了NFC、USB、以太网等功能,满足多场景需求。例如:
  CH58X系列:支持BLE 5.4,内置高速USB PHY,适用于高性能无线键鼠、智能门锁等场景。
  CH57X系列:支持BLE 5.0,集成USB全速控制器,适用于低成本物联网设备。
2. 低功耗设计
沁恒蓝牙芯片采用低功耗架构,支持多种省电模式(如休眠、待机),适合电池供电设备,如智能穿戴、传感器等。
3. 高集成度
芯片内置丰富的外设接口(如UART、SPI、I2C、ADC、PWM等),减少外围电路设计复杂度,降低BOM成本。
4.开发便捷
  沁恒提供完整的开发工具链,包括SDK、调试工具、示例代码等,支持主流开发平台(如Keil、IAR、GCC),降低开发门槛。
  本次测评的是CH579M,CH579 是集成 BLE 无线通讯的 32 位 ARM Cortex-M0 内核32位微控制器。片上集成低功耗蓝牙 BLE 通讯模块、以太网控制器及收发器、全速 USB 主机和设备控制器及收发器、段式 LCD 驱动模块、ADC、触摸按键检测模块、RTC 等丰富的外设资源。

内部框架:

CH579 完全可以作为通用单片机使用,其设计不仅限于 BLE 通信功能,而是集成了丰富的外设资源和强大的 ARM Cortex-M3 内核,足以满足多种嵌入式应用场景的需求。
CH579 作为单片机的核心优势
1.1 高性能 ARM Cortex-M3 内核
主频最高可达 120MHz,支持单周期乘法、硬件除法器,性能足以应对实时控制、信号处理等任务。集成 128KB Flash 和 16KB SRAM,支持程序存储和数据缓存,适合中等复杂度的应用。
1.2  丰富的外设资源
CH579 提供了多种通用外设,可直接用于系统控制:
GPIO:支持多达 42 个可配置 GPIO,可灵活用于输入/输出、中断触发等。
定时器:包含多个通用定时器(TIM)、高级定时器(PWM 输出)、看门狗定时器(WDT)等,满足定时、计数、PWM 生成等需求。
ADC:12 位精度,支持多通道模拟信号采集,适用于传感器数据读取。
RTC:实时时钟模块,支持低功耗计时和闹钟功能。
触摸按键检测:内置电容式触摸按键控制器,可直接实现触摸按键功能,无需额外电路。
段式 LCD 驱动:支持直接驱动段式 LCD 显示屏,适合仪表盘、家电控制面板等应用。
1.3通信接口多样化
USB 2.0 全速控制器:支持主机(Host)和设备(Device)模式,可实现与 PC、移动设备的通信,或作为 USB 主机控制其他外设。以太网控制器:集成 10/100Mbps 以太网 MAC 和 PHY,支持 TCP/IP 协议栈,适合需要网络连接的应用(如物联网网关、智能设备)。UART/SPI/I2C:提供多组串行通信接口,方便与其他外设(如传感器、存储器)连接。
低功耗设计支持多种低功耗模式(睡眠、停机、待机),可通过外部中断或定时器唤醒,适合电池供电设备。
BLE 模块的低功耗特性可进一步延长设备续航时间。

蓝牙开发板


可以通过USB下载或者STlink Jlink DAP调试


keii搭建开发环境:

code串口打印:
#include "CH57x_common.h"

__align(4) UINT8  RxBuffer[ MAX_PACKET_SIZE ];  // IN, must even address
__align(4) UINT8  TxBuffer[ MAX_PACKET_SIZE ];  // OUT, must even address

char send_len = 0;
char send_buff[]="I Love bbs.21ic.com\n\r";
int main()
{
        /*配置串口1*/
        GPIOA_SetBits(GPIO_Pin_9);
        GPIOA_ModeCfg(GPIO_Pin_8, GPIO_ModeIN_PU);     // RXD-配置上拉输入
        GPIOA_ModeCfg(GPIO_Pin_9, GPIO_ModeOut_PP_5mA);// TXD-配置推挽输出,注意先让IO口输出高电平
        UART1_DefInit();
        /*使能接收中断,接收错误中断*/
        UART1_INTCfg( ENABLE, RB_IER_RECV_RDY|RB_IER_LINE_STAT );
//        NVIC_SetPriority(TMR0_IRQn,18);//设置中断优先级(也可以不设置,默认14)
        NVIC_EnableIRQ( UART1_IRQn );
       
        while(1)
        {
                send_len = 0;
                UART1_INTCfg( ENABLE,RB_IER_THR_EMPTY );//使能中断发送
                DelayMs(1000);
        }
}
/*串口中断*/
void UART1_IRQHandler(void)
{
        char data;
        switch( UART1_GetITFlag() )
        {
                case UART_II_LINE_STAT:          // 线路状态错误
                                UART1_GetLinSTA();
                                break;
                case UART_II_RECV_RDY:          // 数据达到设置触发点
                                data = UART1_RecvByte();
                                UART1_SendByte(data);
                                break;
                case UART_II_RECV_TOUT:         // 接收超时,暂时一帧数据接收完成
                                data = UART1_RecvByte();
                                UART1_SendByte(data);
                                break;
                case UART_II_THR_EMPTY:         // 发送缓存区空,可继续发送
                                if(send_len<20)
                                {
                                       
                                        UART1_SendByte(send_buff[send_len]);
                                        send_len++;
                                }
                                else
                                {
                                        UART1_INTCfg( DISABLE,RB_IER_THR_EMPTY );//关闭中断发送
                                }
                               
                                break;
                case UART_II_MODEM_CHG:         // 只支持串口0
                                break;
                default:
                                break;
        }
}
<font face="宋体" size="4">
</font>
代码功能概述:
初始化 UART1:配置 GPIO 引脚为串口功能,设置波特率等参数。
中断驱动通信:通过中断处理接收和发送数据。
接收中断:当收到数据时,立即回传(echo)。
发送中断:通过中断触发发送固定字符串 "I Love bbs.21ic.com\n\r"。



现象:666

使用特权

评论回复
沙发
chenjun89| | 2025-6-4 22:01 | 只看该作者
可以做个蓝牙热敏打印机玩玩

使用特权

评论回复
板凳
weifeng90| | 2025-6-5 08:06 | 只看该作者
沁恒的接口芯片确实方便和简化了很多设计

使用特权

评论回复
地板
低语之树| | 2025-6-6 09:13 | 只看该作者
很牛的展会

使用特权

评论回复
5
种菜娃娃| | 2025-6-6 10:32 | 只看该作者

我也去现场了,确实很热闹。楼主用的CH579应该是很古早的款了,现在主流的是那款BLE+高速USB2.0+NFC多模无线SoC CH585,外设更多,可玩性非常高。
支持BLE5.4,高性能2.4G协议HID应用支持8k回报率,内置480Mbps高速USB PHY、NFC、段式LCD、LED点阵屏接口、防水级触摸按键等外设,封装小至3*3mm,单芯片满足多类型无线/有线连接需求,可轻松构建各类高上报率、高性能、低功耗无线通讯方案。

使用特权

评论回复
6
abner_ma|  楼主 | 2025-6-9 10:39 | 只看该作者
种菜娃娃 发表于 2025-6-6 10:32
我也去现场了,确实很热闹。楼主用的CH579应该是很古早的款了,现在主流的是那款BLE+高速USB2.0+NFC多模无 ...

CH585是高速USB PHY的蓝牙芯片  32位RISC-V内核的,比较先进。579是ARM核心的,协议栈都可以借鉴的

使用特权

评论回复
7
作业天敌在此| | 2025-6-9 13:01 | 只看该作者
这个CH579M的串口打印实验很基础,适合新手入门蓝牙开发。代码逻辑清晰,适合学习。

使用特权

评论回复
8
暖心小太阳| | 2025-6-9 16:02 | 只看该作者
这个CH579M的串口打印示例代码很实用,对于学习蓝牙通信和嵌入式开发很有帮助。

使用特权

评论回复
9
guijial511| | 2025-6-10 08:27 | 只看该作者
适合用来做热敏打印机

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:项目经理
简介:资深嵌入式开发工程师

86

主题

169

帖子

3

粉丝