OpenEdv-开源电子网

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

新手请教一下战舰串口通信实验的问题

[复制链接]

1

主题

3

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2018-5-7
在线时间
1 小时
发表于 2018-5-7 21:42:38 | 显示全部楼层 |阅读模式
1金钱
按照视频第26讲的内容自己编了一遍,没有问题。稍微做了一些修改想实现单片机一直向串口发送信号的功能,但是发现串口调试助手并不能收到任何信号(也就是1),请教一下代码问题在哪。红色部分是主函数,所有的中断都被注释掉了,其余部分是串口初始化和GPIO初始化

#include "stm32f10x.h"
#include "delay.h"


void Usart_Init(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
        //NVIC_InitTypeDef NVIC_InitStructure;

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
       
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
        GPIO_Init(GPIOA,&GPIO_InitStructure);
       
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
        GPIO_Init(GPIOA,&GPIO_InitStructure);
       
        USART_InitStructure.USART_BaudRate = 115200;
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
        USART_InitStructure.USART_Parity = USART_Parity_No;
        USART_InitStructure.USART_StopBits = USART_StopBits_1;
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;
        USART_Init(USART1,&USART_InitStructure);
       
        USART_Cmd(USART1,ENABLE);

        //USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
        //NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
        //NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        //NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
        //NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
        //NVIC_Init(&NVIC_InitStructure);
}

//void USART1_IRQHandler(void)
//{
        //u8 res;
        //if(USART_GetITStatus(USART1,USART_IT_RXNE)){
                //res = USART_ReceiveData(USART1);
                //USART_SendData(USART1,res);
        //}
//}
int main(void)
{       
        // NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
         Usart_Init();
         while(1){
         USART_SendData(USART1,1);
         delay_ms(500);
         }
}


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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-5-8 01:40:34 | 显示全部楼层
先直接在我们例程改,试下能成功不?然后再自己移植。
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2018-5-7
在线时间
1 小时
 楼主| 发表于 2018-5-8 08:43:12 | 显示全部楼层
正点原子 发表于 2018-5-8 01:40
先直接在我们例程改,试下能成功不?然后再自己移植。

谢谢原子哥回复,也是一样的结果
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2018-5-7
在线时间
1 小时
 楼主| 发表于 2018-5-8 10:56:30 | 显示全部楼层
修改之后实现了设想的功能,利用中断。
将ITCONFIG改为USART_ITConfig(USART1,USART_IT_TXE,ENABLE);
之前的代码忘了delay_init(),补上

#include "stm32f10x.h"
#include "delay.h"


void Usart_Init(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
       
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
        GPIO_Init(GPIOA,&GPIO_InitStructure);
       
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
        GPIO_Init(GPIOA,&GPIO_InitStructure);
       
        USART_InitStructure.USART_BaudRate = 115200;
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
        USART_InitStructure.USART_Parity = USART_Parity_No;
        USART_InitStructure.USART_StopBits = USART_StopBits_1;
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;
        USART_Init(USART1,&USART_InitStructure);
       
        USART_Cmd(USART1,ENABLE);

        USART_ITConfig(USART1,USART_IT_TXE,ENABLE);
        NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
        NVIC_Init(&NVIC_InitStructure);
}

void USART1_IRQHandler(void)
{

        delay_init();
        while(1)
        {
                USART_SendData(USART1,01);
                delay_ms(500);
        }
}
int main(void)
{       

         Usart_Init();
         
         while(1);
}
回复

使用道具 举报

8

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
117
金钱
117
注册时间
2017-8-19
在线时间
44 小时
发表于 2018-5-8 10:58:26 | 显示全部楼层
加上这句话USART_ClearFlag(USARTx, USART_FLAG_TXE);
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2018-5-26
在线时间
0 小时
发表于 2018-5-26 15:38:12 | 显示全部楼层
梁旭东 发表于 2018-5-8 10:56
修改之后实现了设想的功能,利用中断。
将ITCONFIG改为USART_ITConfig(USART1,USART_IT_TXE,ENABLE);
之 ...

为什么把发送的数据从1改到别的比较长的数据只显示好多遍第一个数据,而不是完整的数据?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 10:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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