发 帖  
原厂入驻New
[问答]

串口通信在超级终端发了一个命令后SBSB语句没返回

568 串口 终端
分享


的意图是用电脑的超级终端先向usart1发送任意一个命令,然后usart1返回SBSB这个语句,接着USART2发送出一条命令oreder,和Usart2连接的模块收到这个命令后会返回一个命令rec。但我在超级终端发了一个命令后,连SBSB这个语句都没返回。求教
int main(void)
{
char i;
char j;
uint32_t oreder[ ] = {0x01, 0x03,0x00,0x48,0x00,0x08,0xC4,0x1A};
uint32_t rec[ ]={0x01, 0x03,0x00,0x48,0x00,0x08,0xC4,0x1A};;
USART1_Config();
USART2_Config();
NVIC_Configuration();
while(1){
while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET)
{}
printf("SBSB");
while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)
{}

for(i=0;i<8;i++) {
USART_SendData(USART2, oreder);
while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET)
{} }
for(j=0;i<37;j++) {
while (USART_GetFlagStatus(USART2, USART_FLAG_RXNE) == RESET)
{}
rec[j] = (USART_ReceiveData(USART2));
USART_SendData(USART1, rec[j]);
while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)
{}
}





} }








void USART1_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;

/* config USART1 clock */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);

/* USART1 GPIO config */
/* Configure USART1 Tx (PA.09) as alternate function push-pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* Configure USART1 Rx (PA.10) as input floating */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);

/* USART1 mode config */
USART_InitStructure.USART_BaudRate = 115200;
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(USART1, &USART_InitStructure);
USART_Cmd(USART1, ENABLE);
}
void USART2_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;

/* config USART1 clock */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);

/* USART1 GPIO config */
/* Configure USART1 Tx (PA.09) as alternate function push-pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* Configure USART1 Rx (PA.10) as input floating */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);

/* USART1 mode config */
USART_InitStructure.USART_BaudRate = 4800;
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(USART1, &USART_InitStructure);
USART_Cmd(USART2, ENABLE);
}
/*
* 函数名:fputc
* 描述 :重定向c库函数printf到USART1
* 输入 :无
* 输出 :无
* 调用 :由printf调用
*/
int fputc(int ch, FILE *f)
{
/* 将Printf内容发往串口 */
USART_SendData(USART1, (unsigned char) ch);
while (!(USART1->SR & USART_FLAG_TXE));

return (ch);
}
0
2018-9-26 09:27:00   评论 分享淘帖 邀请回答

相关问题

7个回答
2018-9-26 09:40:20 评论

举报

2018-9-26 09:49:06 评论

举报

2018-9-26 09:55:08 评论

举报

帮顶     .。。。。。。。。。。
2018-9-26 10:10:17 评论

举报

你在超级终端发了一个字节后,先让一个LED闪烁,检测一下收数据的情况。
2018-9-26 10:27:24 评论

举报

2018-9-26 10:36:07 评论

举报

RCC_APB2Periph_AFIO,把这个时钟开一下试试。
2018-9-26 10:47:21 评论

举报

撰写答案

你正在撰写答案

如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。

高级模式
您需要登录后才可以回帖 登录 | 注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
我要提问
关闭

站长推荐 上一条 /8 下一条

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