STM32F103驱动KT148A语音芯片

 电路图,以及更新语音包接口

如何更新自己的语音包

端口定义

#define IO1_HIGH          GPIO_SetBits(GPIOB,GPIO_Pin_10);          //喇叭
#define IO1_HIGL          GPIO_ResetBits(GPIOB,GPIO_Pin_10);

oneline_send_one_data(door_no);//开语音

/*******************************************************************************
 - 函数说明:一线通数据发送【注意调试的时候,用示波器或者逻辑分析仪看一下脉冲宽度】
 - 隶属模块:内部
 - 参数说明:dat = 待发送的数据
 - 返回说明:无 -- 这里对应的就是PB9这个GPIO  ,不同的MCU,对于IO口的操作不同,这个自己理解了
 - 备注:
整体的通讯逻辑如下:
1、先把数据线DATA,也就是ONELINE,拉低 6ms 后,发送 8 位数据,先发送低位,再发送高位。
2、使用高电平和低电平比例来表示每个数据位的值。
3、推荐使用 200us:600us。取值范围:窄脉冲=[150us--400us]    宽脉冲[500us--1000us]
********************************************************************************/
 

void oneline_send_one_data(u8 dat) 
{
    u8 i = 0 ;
    IO1_HIGL ;/*现将总线拉低*/
    delay_ms(6) ;/*延时6MS --- 这里就是发起通讯的起始信号------注意不同的芯片延时不一样,请自行测试*/
        __set_PRIMASK(1);  /* 禁止全局中断*/

    for(i=0 ; i<8 ;i++){
        if(dat & 0x01){
           IO1_HIGH ;
             delay_us(600);/*延时600us*/
            IO1_HIGL;
             delay_us(200) ;/*延时200us*/
        }else{
            IO1_HIGH ;
           delay_us(200);/*延时200us*/
           IO1_HIGL;
            delay_us(600) ;/*延时600us*/
        }
        dat = dat >> 1 ;/*发送的时候,先发送最高位,再发送次高位,以此类推*/
    }
   IO1_HIGH ;/*空闲时将该脚拉高即可*/
   __set_PRIMASK(0);              /*  使能全局中断 */
    /*同时注意,芯片初始化的时候,请将信号脚拉高。*/
}

以上驱动带自测可用。

1、为什么按照例程发的数据,没反应呢?
==》面对这个问题,应该是借助仪器:示波器、逻辑分析仪等等仪器来测试你的波形
==》而不是来问我们什么原因,我们也没法给出意见,最好用仪器看一下,找出问题来

2、为什么程序里面,需要关中断、再来开中断呢?
==》这样的目的,是为了保证波形的完整性,因为你的,注意是你的mcu运行时候,可能存在
多种中断交替,这样就会导致在发送波形的途中,被打断,导致时间变长,或者其他

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值