OpenEdv-开源电子网

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

f1串口移植f7串口问题,求教

[复制链接]

14

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
121
金钱
121
注册时间
2020-11-3
在线时间
26 小时
发表于 2020-12-8 14:30:35 | 显示全部楼层 |阅读模式
8金钱
现有一个f1串口发送程序
void USART_Send_Byte(unsigned char byte )
{
        while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);  //等待发送数据寄存器空
         USART_SendData(USART1,byte);
}
移植到f7之后是这样吗
void USART_Send_Byte(unsigned char byte )
{
        while(__HAL_UART_GET_FLAG(&UART1_Handler,UART_FLAG_RXNE)==RESET);  //等待发送数据寄存器空
        HAL_UART_Transmit(&UART1_Handler,(uint8_t *)byte,4,0xa0);
}
纯新手,求教
是基于syn6288语音模块的移植卡住了

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

使用道具 举报

14

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
121
金钱
121
注册时间
2020-11-3
在线时间
26 小时
 楼主| 发表于 2020-12-8 16:55:45 | 显示全部楼层
void USART_Send_Byte(unsigned char byte)  
{   
     while(__HAL_UART_GET_FLAG(&UART1_Handler,UART_FLAG_RXNE)==RESET);  //等待发送数据寄存器空       
         USART1->TDR=byte;  
         while((USART1->ISR&0X40)==0);     //循环发送,直到发送完毕        
}
这样写也发不了声,下面是语音合成代码
void SYN6288_Speech( char * str )
    {
        char * p = str;
        int len = 0,check=0xFD,i;//check异或校验

        while( *p++ != 0 )//计算待发送文本长度

        {
            len++;
        }
        len+=3;                        //计算数据区长度
                delay_ms(2);                                                                        /*测试得出这里要加至少2ms的延时,不然如果连续发送语音会发生某些语音丢失的情况,
                                                                                                        只延时1ms也会丢失,直接加载后面的8ms上也会发生丢失的情况*/
//        while(SynBusy_Sta);
        USART_Send_Byte(0xFD);    //发送帧头
        /*数据区长度高字节在前*/
        USART_Send_Byte( len >> 8 );//发送数据区长度高八位
        USART_Send_Byte( len );//发送数据区长度低八位       
        check  = check ^ ( len >> 8  ) ^ ( len );//校验和
               
        /*命令参数*/
        USART_Send_Byte( 0x01 );//发送命令字->表示语音合成命令
        USART_Send_Byte( 0x01 );//发送命令参数->不加背景音乐,文本GBK编码格式
               
               
                /*异或校验*/
        check = check ^ 0x01 ^ 0x01;//帧头和数据区长度字节做的异或校验
       //发送文本内容
        for( i = 0; i < len-3; i++ )
        {
            USART_Send_Byte(*str);
            check ^= ( *str );
            str++;
        }
        USART_Send_Byte(check);   //发送异或检验
        delay_ms(8);//数据手册要求帧与帧之间的发送间隔必须超过8ms
    }
回复

使用道具 举报

14

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
121
金钱
121
注册时间
2020-11-3
在线时间
26 小时
 楼主| 发表于 2020-12-8 17:54:47 | 显示全部楼层
串口调试助手是乱码的,f1就没问题
回复

使用道具 举报

14

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
121
金钱
121
注册时间
2020-11-3
在线时间
26 小时
 楼主| 发表于 2020-12-8 18:43:33 | 显示全部楼层
哦已自己解决
void USART_Send_Byte(unsigned char byte )
{      
        while(__HAL_UART_GET_FLAG(&UART1_Handler,USART_FLAG_TC)!=SET);  //等待发送数据寄存器空
        HAL_UART_Transmit(&UART1_Handler,&byte,sizeof(byte),1000);        //发送接收到的数据
}
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-14 22:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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