一、模块来源
二、规格参数
输入电压:2.8V-5.5V
IO电压:3.3V(模块引脚输出电压)
额定电流:500uA~10mA
控制方式:串口
以上信息见厂家资料文件
三、移植过程
1、查看资料
此芯片最大的优势在于能够灵活的更换 SPI-flash 内的语音内容,省去了传统语音芯片需要安装上位机更换语音的麻烦,SPI FLASH 直接模拟成 U 盘,跟拷贝 U 盘一样,非常方便。使得产品研发和生产变得便捷简单。一线串口控制模式、RX232 串口控制可选,为研发提供更多的选择性。
USB 数据线连接芯片,插上电脑,电脑会自动识别,如下图所示:出厂内部自带了10首语音。
注意语音内容不可太长,防止内存不够。
该模块分有单独IO控制、一线串行控制、两线串口控制。
单独IO口控制
如果需要更新语音,把要放置的声音拷贝过去按照相应格式命名即可。按 5 位数字进行命名,即 00001、00002......00007。
一线串行控制
两线串口控制
波特率为 9600,数据位:8 ,停止位 1 位,检验位 N
2、引脚选择
DC-5V | 5V0 |
GND | GND |
TXD | GPIO57 |
RXD | GPIO56 |
SPK+(BP) | 喇叭正极 |
SPK-(BN) | 喇叭负极 |
VPP | GPIO52 |
接下来我们配置 SYSCONFIG
- 双击 c2000.syscfg 文件,打开它。
- 点击 ADD 添加配置
- 配置
- 点击ADD添加GPIO配置
- 配置GPIO
Ctrl + S
保存配置文件Ctrl + B
构建工一次工程(可能会报错,我们不用管!)然后我们所有设定的引脚和功能就会在 board.h 中定义。因为这个文件我们包含进了 tjx_init.h 所以我们只需要引用 tjx_init.h 即可。【这里的 tjx_init.h 就充当了芯片头文件的作用】
3、代码编写
我们在工程中新建 module_driver
,并在其中新建两个文件 bsp_jq8900.c
和 bsp_jq8900.h
,并且将头文件路径添加到编译器中。
在文件bsp_jq8900.c中,编写如下代码。
/*
* 立创开发板软硬件资料与相关扩展板软硬件资料官网全部开源
* 开发板官网:www.lckfb.com
* 文档网站:wiki.lckfb.com
* 技术支持常驻论坛,任何技术问题欢迎随时交流学习
* 嘉立创社区问答:https://www.jlc-bbs.com/lckfb
* 关注bilibili账号:【立创开发板】,掌握我们的最新动态!
* 不靠卖板赚钱,以培养中国工程师为己任
*/
#include "bsp_jq8900.h"
#include "stdio.h"
#include "string.h"
/******************************************************************
* 函 数 名 称:JQ8900_USART_Send_chr
* 函 数 说 明:向JQ8900模块发送单个字符
* 函 数 形 参:ch=字符
* 函 数 返 回:无
* 作 者:LCKFB
* 备 注:无
******************************************************************/
void JQ8900_USART_Send_chr(unsigned char ch)
{
// 发送单个字符
SCI_writeCharArray(Module_Serial_BASE, &ch, 1);
}
/******************************************************************
* 函 数 名 称:JQ8900_USART_send_String
* 函 数 说 明:向JQ8900模块发送字符串
* 函 数 形 参:str=发送的字符串
* 函 数 返 回:无
* 作 者:LCKFB
* 备 注:无
******************************************************************/
void JQ8900_USART_send_String(unsigned char *str, unsigned int len)
{
while( len-- )
{
JQ8900_USART_Send_chr(*str++);
}
}
/**********************************************************
* 函 数 名 称:SendData
* 函 数 功 能:一线串行通信控制
* 传 入 参 数:addr=发送的指令
* 函 数 返 回:无
* 作 者:LCKFB
* 备 注:无
**********************************************************/
void SendData ( unsigned char addr )
{
unsigned char i;
SET_JQ8900_APP(1); /*开始拉高 */
delay_us ( 500 );
SET_JQ8900_APP(0);/*开始引导码*/
delay_ms ( 4 );/*此处延时最少要大于2ms,官方建议4MS */
for ( i = 0; i < 8; i++ ) /*总共8位数据,从低位开始 */
{
// 数据总是从1开始
SET_JQ8900_APP(1);
if ( addr & 0x01 )
{
delay_us ( 1300 ); /*3:1表示数据位1,每个位用两个脉冲表示 */
SET_JQ8900_APP(0);
delay_us ( 500 );
}
else
{
delay_us ( 500 ); /*1:3表示数据位0 ,每个位用两个脉冲表示 */
SET_JQ8900_APP(0);
delay_us ( 1300 );
}
addr >>= 1;
}
SET_JQ8900_APP(1);
delay_ms(10);//两个字节之间延时建议在10ms以上
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
在文件bsp_jq8900.h中,编写如下代码。
/*
* 立创开发板软硬件资料与相关扩展板软硬件资料官网全部开源
* 开发板官网:www.lckfb.com
* 文档网站:wiki.lckfb.com
* 技术支持常驻论坛,任何技术问题欢迎随时交流学习
* 嘉立创社区问答:https://www.jlc-bbs.com/lckfb
* 关注bilibili账号:【立创开发板】,掌握我们的最新动态!
* 不靠卖板赚钱,以培养中国工程师为己任
*/
#ifndef __BSP_JQ8900_H__
#define __BSP_JQ8900_H__
#include "tjx_init.h"
#define SET_JQ8900_APP(X) GPIO_writePin(GPIO_VPP, X)
void JQ8900_USART_send_String(unsigned char *str, unsigned int len);
void SendData ( unsigned char addr );
void JQ8900_USART_Send_chr(unsigned char ch);
#endif
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
四、移植验证
在 empty_driverlib_main.c
中输入代码如下:
#include "driverlib.h"
#include "device.h"
#include "board.h"
#include "c2000ware_libraries.h"
#include "tjx_init.h"
#include "bsp_jq8900.h"
// 延时时间是:time * 3
// 单位ms
void RGB_Blink_Delay(int time)
{
// RGB的B灯亮起,G灯熄灭
GPIO_writePin(RGB_B, 0);
GPIO_writePin(RGB_G, 1);
delay_ms(time);
// RGB的G灯亮起,B灯熄灭
GPIO_writePin(RGB_B, 1);
GPIO_writePin(RGB_G, 0);
delay_ms(time);
// RGB的B和G都熄灭
GPIO_writePin(RGB_B, 1);
GPIO_writePin(RGB_G, 1);
delay_ms(time);
}
void main(void)
{
/* The initialization code automatically generated by CCS [Start] */
Device_init();
Device_initGPIO();
Interrupt_initModule();
Interrupt_initVectorTable();
Board_init();
C2000Ware_libraries_init();
EINT;
ERTM;
/* The initialization code automatically generated by CCS [End] */
lc_printf("\r\n= = = = = = = = = = = = = = = = = = = = = = = = =\r\n");
lc_printf("\r\n=== Welcome to use the LC-TJX-TMS320F28P550 ====\r\n");
lc_printf("\r\n============== www.lckfb.com ===================\r\n");
lc_printf("\r\n============== wiki.lckfb.com ==================\r\n");
lc_printf("\r\n= = = = = = = = = = = = = = = = = = = = = = = = =\r\n");
// 下一曲(没有指定曲目则从1开始一直播报到最后)
uint8_t send_buff[4] = {0xAA,0x06,0x00,0xB0};
while(1)
{
JQ8900_USART_send_String(send_buff, 4);
RGB_Blink_Delay(1200); // 1.2s * 3 = 3.6s
}
}
__interrupt void INT_Debug_Serial_RX_ISR(void)
{
//清除接收中断标志位
SCI_clearInterruptStatus(SCIA_BASE, SCI_INT_RXFF);
//清除中断标志位
Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP9);
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
【代码下载】
- 跳转到
下载中心
去下载CCS模块移植代码:【点击跳转🚀】