OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 10235|回复: 14

有没有人做过SYN6288的,去驱动程序

[复制链接]

7

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2013-11-2
在线时间
13 小时
发表于 2014-8-8 17:11:20 | 显示全部楼层 |阅读模式
5金钱
[mw_shl_code=c,true]#include "SYN6288.h" #include "sys.h" #include "delay.h" #include "usart.h" #include "string.h" #define BV(A) (1<<A) const char text[]={0xD3,0xEE,0xD2,0xF4,0xCC,0xEC,0xCF,0xC2}; //SYN6288初始化 void SYN6288_Init(void) { SYN6288_GPIO_Init(); uart2_init(36,9600); } void SYN6288_GPIO_Init(void) { GPIOC->BSRR = BV(3); GPIOC->CRL&=0xffff0f00; GPIOC->CRL|=0x00007033; GPIOB->CRH&=0xffffff0f; GPIOB->CRH|=0x00000080; GPIOB->ODR=1<<9; } //初始化IO 串口2 //pclk1CLK1时钟频率(最大36Mhz) //bound:波特率 //CHECK OK //091209 void uart2_init(u32 pclk1,u32 bound) { float temp; uint16_t mantissa; uint16_t fraction; temp=(float)(pclk1*1000000)/(bound*16); //得到USARTDIV mantissa=temp; //得到整数部分 fraction=(temp-mantissa)*16; //得到小数部分 mantissa<<=4; mantissa+=fraction; RCC->APB2ENR|=1<<2; //使能PORTA口时钟 RCC->APB1ENR|=1<<17; //使能串口时钟 GPIOA->CRL&=0Xffff00ff; //IO状态设置 GPIOA->CRL|=0X00004800; //IO状态设置 RCC->APB1RSTR|=1<<17; //复位串口2 RCC->APB1RSTR&=~(1<<17); //停止复位 //波特率设置 USART2->BRR=mantissa; // 波特率设置 USART2->CR1|=0X200C; //1位停止,无校验位. } void SEND_SYN(void) { uint8_t i,j; uint8_t ecc=0; uint8_t head[5]; uint8_t length; length=strlen(text); head[0]=0xFD; head[0]=0x00; head[0]=length+3; head[0]=0x01; head[0]=0x00; for(i=0; i<5; i++) { ecc^= head; STM_SendChar(head); } for(j=0; j<length; j++) { ecc^=text[j]; STM_SendChar(text[j]); } STM_SendChar(ecc); } void STM_SendChar(uint8_t ch) { USART_SendData(USART2, ch); while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET) //查询等待标志复位 { USART_ClearFlag(USART2,USART_FLAG_TC); //清除发送完成标志 } } 自己的驱动怎么都不响[/mw_shl_code]

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-8-8 23:08:02 | 显示全部楼层
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2016-5-1
在线时间
4 小时
发表于 2016-5-18 11:14:03 | 显示全部楼层
……表示我也是,怎么驱动都不响,折腾了好久也没明白为什么为什么为什么……按道理说应该可以了呀
回复

使用道具 举报

6

主题

69

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1786
金钱
1786
注册时间
2015-4-20
在线时间
258 小时
发表于 2016-5-18 11:19:52 | 显示全部楼层
#include "SYN6288.h"   


unsigned char yuyin_ct = 0;
unsigned char yuyin_test_ok = 0;


/****************需要发送的文本**********************************/
char yinliang[] = "[v1]";
//char yinliang[] = "[v12]";
char yusu[] = "[t5]";
char welcome[] = "欢迎使用";
char thanks[] = "谢谢";
char Moratorium[] = "此卡已冻结";
char lost[] = "此卡已挂失";
char insufficient_Balance[] = "余额不足";
char xuanze_caipin[] = "请选择菜品";
char _shuaka[] = "请刷卡";
char __qingchu[] = "正在清除请稍后";
char __wancheng[] = "清除成功";
char lcd_error[] = "没有检测到液晶屏";
char _tishi_yin[] = "soundm";
char _add_caipin[]="添加成功";
char _no_vegatable_number[]="该菜品不存在";
char _button_write_error[]="输入错误";
char _button_write_ok[]="修改成功";
char _zlg522s_rx_error[]="请虫刷";
unsigned char headOfFrame[5];
unsigned char length ;
unsigned char ecc = 0 ; //定义校验字节
unsigned int yuyin_ct_i = 0;
void delay_yuyin(unsigned int timer_delay)
{
        unsigned char _delay_a;
        for(;timer_delay != 0;timer_delay --)
        {
                for(_delay_a = 8;_delay_a != 0;_delay_a--)
                {
                ;
                }
        }
}
void send_yuyin_n(char *yuyin_n)
{
        ecc = 0;
//        delay_yuyin(1000);
        length = (strlen(yuyin_n)); //需要发送文本的长度
        /*****************发送过程**************************************/
        headOfFrame[0] = 0xFD ; //构造帧头 FD
        headOfFrame[1] = 0x00 ; //构造数据区长度的高字节
        headOfFrame[2] = length + 3; //构造数据区长度的低字节
        headOfFrame[3] = 0x01 ; //构造命令字:合成播放命令
        headOfFrame[4] = 0x01 ; //构造命令参数:编码格式为 GBK
        for(yuyin_ct_i = 0; yuyin_ct_i<5; yuyin_ct_i++) //依次发送构造好的 5 个帧头字节
        {
                ecc=ecc^(headOfFrame[yuyin_ct_i]); //对发送的字节进行异或校验
                USART_SendData(UART5,headOfFrame[yuyin_ct_i]);
                /* 等待发送完毕 */
                while(USART_GetFlagStatus(UART5, USART_FLAG_TXE) == RESET){};
        }
        for(yuyin_ct_i = 0; yuyin_ct_i < length; yuyin_ct_i++) //依次发送待合成的文本数据
        {
                ecc=ecc^(yuyin_n[yuyin_ct_i]); //对发送的字节进行异或校验
                USART_SendData(UART5,yuyin_n[yuyin_ct_i]);
                /* 等待发送完毕 */
                while(USART_GetFlagStatus(UART5, USART_FLAG_TXE) == RESET){};
        }
        USART_SendData(UART5,ecc);
        /* 等待发送完毕 */
        while(USART_GetFlagStatus(UART5, USART_FLAG_TXE) == RESET){};
}

void UART5_IRQHandler()
{
        /* 接收中断 */
        if(((UART5->SR) & 0X0020) == 0X0020)
        {
                UART5->SR &=~0X0020;
                if(UART5->DR == 0x4F)
                {
                        yuyin_test_ok = 1;
                }
        }
}
回复

使用道具 举报

6

主题

69

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1786
金钱
1786
注册时间
2015-4-20
在线时间
258 小时
发表于 2016-5-18 11:30:51 | 显示全部楼层
再给你个参考电路C:\Users\Administrator\Desktop
回复

使用道具 举报

6

主题

69

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1786
金钱
1786
注册时间
2015-4-20
在线时间
258 小时
发表于 2016-5-18 11:34:43 | 显示全部楼层
syn6288
6 001.jpg
回复

使用道具 举报

6

主题

69

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1786
金钱
1786
注册时间
2015-4-20
在线时间
258 小时
发表于 2016-5-18 11:35:31 | 显示全部楼层
不好意思发错了
QQ截图20160518112832.jpg
回复

使用道具 举报

6

主题

69

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1786
金钱
1786
注册时间
2015-4-20
在线时间
258 小时
发表于 2016-5-18 11:40:43 | 显示全部楼层
楼主注意:重要的是上电时,系统设计要尽量保证, SYN6288 各组电源升到正常电位比 Res 到正常电位要慢。否则syn6288不能正常工作,即使你发送了正确的数据也不会有响应。我以前也遇到这种问题,所以res引脚电压用的是5V的,以保证每次上电后syn6288能正常工作。
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2016-5-1
在线时间
4 小时
发表于 2016-5-18 15:47:32 | 显示全部楼层
潇潇熊 发表于 2016-5-18 11:40
楼主注意:重要的是上电时,系统设计要尽量保证, SYN6288 各组电源升到正常电位比 Res 到正常电位要慢。否 ...

你好,我想请教一下,现在我的问题是这样的:STM32用USB转TTL发送给电脑,用串口调试助手发现接收很正常,但是接SYN6288依旧是听不到声音,用的是PA2和PA3口,为了商家,他问会不会是A2A3接了其他东西,但我看了原子MINI原理图PA2和PA3并没接其他的。
然而我用电脑发送数据给SYN6288又能听到声音。。。
总而言之,串口程序没问题……SYN6288模块也没问题……耳机也没问题。。。。为什么换成开发板接就听不到了。。。。
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2016-5-1
在线时间
4 小时
发表于 2016-5-18 15:48:18 | 显示全部楼层
潇潇熊 发表于 2016-5-18 11:40
楼主注意:重要的是上电时,系统设计要尽量保证, SYN6288 各组电源升到正常电位比 Res 到正常电位要慢。否 ...

void TTSPlay_1(void)
{
                        u8 SoundBuf[12]={0xFD, 0x00, 0x07, 0x01, 0x01, 0xC4, 0xE3, 0xBA, 0xC3, 0x0D, 0x0A, 0xAD };
                        u8 i,xorcrc=0;
        for (i=0;i<12;i++)
        {
                xorcrc= xorcrc ^ (SoundBuf);
                USART_Send_Byte(SoundBuf);
        }
        USART_Send_Byte(xorcrc);
}






/***************************
′&#174;&#191;ú&#197;&#228;&#214;&#195;oˉêy
***************************/
void USART_Configuration(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO, ENABLE);
//                RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;                                        //TX
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;                                        //RX
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
       
        USART_InitStructure.USART_BaudRate = 9600;
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;
        USART_InitStructure.USART_StopBits = USART_StopBits_1;
        USART_InitStructure.USART_Parity = USART_Parity_No;
                USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
       
        USART_Init(USART2, &USART_InitStructure);
                               
        USART_Cmd(USART2, ENABLE);
                                USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//&#191;a&#198;&#244;′&#174;&#191;ú&#189;óêü&#214;D&#182;&#207;
        USART_ClearFlag(USART2, USART_FLAG_TC);
}


/***************************************************************************
2&#206;êy&#203;μ&#195;÷:mydata′y·¢&#203;íμ&#196;êy&#190;Y
·μ&#187;&#216;&#203;μ&#195;÷:&#206;T
***************************************************************************/
void USART_Send_Byte(u8 mydata)
{           
        USART_ClearFlag(USART2,USART_FLAG_TC);
        USART_SendData(USART2,mydata);
                LCD_ShowxNum_color(80,40,mydata,16,16,0,BLACK);
        while(USART_GetFlagStatus(USART2,USART_FLAG_TC)==RESET);
                        USART_ClearFlag(USART2,USART_FLAG_TC);   
}
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2016-5-1
在线时间
4 小时
发表于 2016-5-18 15:49:08 | 显示全部楼层
[mw_shl_code=c,true]void TTSPlay_1(void)
{
                        u8 SoundBuf[12]={0xFD, 0x00, 0x07, 0x01, 0x01, 0xC4, 0xE3, 0xBA, 0xC3, 0x0D, 0x0A, 0xAD };
                        u8 i,xorcrc=0;
        for (i=0;i<12;i++)
        {
                xorcrc= xorcrc ^ (SoundBuf);
                USART_Send_Byte(SoundBuf);
        }
        USART_Send_Byte(xorcrc);
}






/***************************
′&#174;&#191;ú&#197;&#228;&#214;&#195;oˉêy
***************************/
void USART_Configuration(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO, ENABLE);
//                RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;                                        //TX
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;                                        //RX
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
       
        USART_InitStructure.USART_BaudRate = 9600;
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;
        USART_InitStructure.USART_StopBits = USART_StopBits_1;
        USART_InitStructure.USART_Parity = USART_Parity_No;
                USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
       
        USART_Init(USART2, &USART_InitStructure);
                               
        USART_Cmd(USART2, ENABLE);
                                USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//&#191;a&#198;&#244;′&#174;&#191;ú&#189;óêü&#214;D&#182;&#207;
        USART_ClearFlag(USART2, USART_FLAG_TC);
}


/***************************************************************************
2&#206;êy&#203;μ&#195;÷:mydata′y·¢&#203;íμ&#196;êy&#190;Y
·μ&#187;&#216;&#203;μ&#195;÷:&#206;T
***************************************************************************/
void USART_Send_Byte(u8 mydata)
{           
        USART_ClearFlag(USART2,USART_FLAG_TC);
        USART_SendData(USART2,mydata);
                LCD_ShowxNum_color(80,40,mydata,16,16,0,BLACK);
        while(USART_GetFlagStatus(USART2,USART_FLAG_TC)==RESET);
                        USART_ClearFlag(USART2,USART_FLAG_TC);   
}
[/mw_shl_code]
回复

使用道具 举报

6

主题

69

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1786
金钱
1786
注册时间
2015-4-20
在线时间
258 小时
发表于 2016-5-20 12:56:45 | 显示全部楼层
楼主  你用STM32给SYN6288发数据  有返回数据么?
回复

使用道具 举报

0

主题

9

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
230
金钱
230
注册时间
2016-9-12
在线时间
42 小时
发表于 2016-10-28 14:49:01 | 显示全部楼层
话说楼主驱动成功没有?  如果成功能否分享一下源码?
我用430和51都可以   就是32没成功
1511084959@qq.com
回复

使用道具 举报

0

主题

9

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
230
金钱
230
注册时间
2016-9-12
在线时间
42 小时
发表于 2016-10-28 16:44:17 | 显示全部楼层
不用了     我解决了
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2021-3-21
在线时间
0 小时
发表于 2021-3-21 22:00:45 | 显示全部楼层
哭了啊,它为什么不响
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-28 19:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表