[蓝牙芯片] 【沁恒蓝牙SOC——CH579M篇】GPIO中断引发串口打印

[复制链接]
 楼主| abner_ma 发表于 2025-6-18 18:18 | 显示全部楼层 |阅读模式
  CH579 是集成 BLE 无线通讯的 ARM 内核 32 位微控制器。片上集成低功耗蓝牙 BLE 通讯模块、以太网控制器及收发器、全速 USB 主机和设备控制器及收发器、段式 LCD 驱动模块、ADC、触摸按键检测模块、RTC 等丰富的外设资源。
  功能强大:通用输入输出端口 GPIO:
- 40 个 GPIO,其中 4 个支持 5V 信号输入
- 32 个中断输入,32 个唤醒输


3.png


最小系统原理图:
1.png
程序设计使用GPIO7下降沿触发中断的程序,实现了GPIO下降沿中断和UART1接收中断的回显功能。短接GIPO7和GND,进入中断后引发串口将会打印。

  1. #include "CH57x_common.h"

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

  4. int main()
  5. {
  6.         //上拉
  7.         GPIOA_ModeCfg(GPIO_Pin_7, GPIO_ModeIN_PU);
  8.         //下降沿触发
  9.         GPIOA_ITModeCfg(GPIO_Pin_7,GPIO_ITMode_FallEdge);
  10.         //        NVIC_SetPriority(GPIO_IRQn,4);//设置中断优先级(也可以不设置,默认 4)
  11.         //使能中断
  12.         NVIC_EnableIRQ( GPIO_IRQn );
  13.        
  14.         /*配置串口1*/
  15.         GPIOA_SetBits(GPIO_Pin_9);
  16.         GPIOA_ModeCfg(GPIO_Pin_8, GPIO_ModeIN_PU);     // RXD-配置上拉输入
  17.         GPIOA_ModeCfg(GPIO_Pin_9, GPIO_ModeOut_PP_5mA);// TXD-配置推挽输出,注意先让IO口输出高电平
  18.         UART1_DefInit();
  19.         /*使能接收中断,接收错误中断*/
  20.         UART1_INTCfg( ENABLE, RB_IER_RECV_RDY|RB_IER_LINE_STAT );
  21. //        NVIC_SetPriority(TMR0_IRQn,18);//设置中断优先级(也可以不设置,默认14)
  22.         NVIC_EnableIRQ( UART1_IRQn );
  23.        
  24.         while(1)
  25.         {
  26.         }
  27. }

  28. //GPIO中断
  29. void GPIO_IRQHandler(void) {
  30.         if(GPIOA_ReadITFlagBit(GPIO_Pin_7))
  31.         {
  32.                 GPIOA_ClearITFlagBit(GPIO_Pin_7);
  33.                 PRINT("gpio interrupt\r\n");
  34.         }
  35. }

  36. /*串口中断*/
  37. void UART1_IRQHandler(void)
  38. {
  39.         char data;
  40.         switch( UART1_GetITFlag() )
  41.         {
  42.                 case UART_II_LINE_STAT:          // 线路状态错误
  43.                                 UART1_GetLinSTA();
  44.                                 break;
  45.                 case UART_II_RECV_RDY:          // 数据达到设置触发点
  46.                                 data = UART1_RecvByte();
  47.                                 UART1_SendByte(data);
  48.                                 break;
  49.                 case UART_II_RECV_TOUT:         // 接收超时,暂时一帧数据接收完成
  50.                                 data = UART1_RecvByte();
  51.                                 UART1_SendByte(data);
  52.                                 break;
  53.                 case UART_II_THR_EMPTY:         // 发送缓存区空,可继续发送
  54.                                 break;
  55.                 case UART_II_MODEM_CHG:         // 只支持串口0
  56.                                 break;
  57.                 default:
  58.                                 break;
  59.         }
  60. }
2.png
4.png
AquaWhisper 发表于 2025-7-17 15:56 | 显示全部楼层
这颗芯片只支持BLE吗?还是全栈蓝牙协议?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

95

主题

181

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部
认证:项目经理
简介:资深嵌入式开发工程师

95

主题

181

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部