jacomch 发表于 2016-12-18 10:12:04

STM32的串口1通信问题

最近刚开始学习STM32,到USART部分的RS232,用USART1通信,模仿教学里的程序,也是一个利用串口中断,将PC端发送过来的数据加1,然后返回。编写好无报错,但是用串口助手调试时,数据发出去就石沉大海了,(发送了6次都没收到),
串口初始化程序如下:


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

        SystemInit();
       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
               
        GPIO_InitStructure.GPIO_Pin=TXD;   //头文件里已经定义 #define TXDGPIO_Pin_9
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;                               
        GPIO_Init(GPIOA,&GPIO_InitStructure);
       
        GPIO_InitStructure.GPIO_Pin=RXD;               //头文件里已经定义 #define RXDGPIO_Pin_10                               
        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_Tx | USART_Mode_Rx;
        USART_Init(USART1, &USART_InitStructure);
       
        USART_ClearFlag(USART1,USART_FLAG_TC);
        USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
        USART_Cmd(USART1, ENABLE);       
       
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
        NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;                       
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;                       
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);                
}

中断函数如下:
void USART1_IRQHandler(void)                //′®¿ú1èë¿úoˉêy
{
        static u8 rx_sbuf;
        USART_ClearFlag(USART1,USART_FLAG_TC);
        if(USART_GetITStatus(USART1,USART_IT_RXNE)!=Bit_RESET)
        {
                rx_sbuf=USART_ReceiveData(USART1);
                rx_sbuf++;
                USART_SendData(USART1,rx_sbuf);
                while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==Bit_RESET);
        }
}

主函数如下:

int main()
{
        Usart_Init();       
        while(1);       
}


初学STM32,,求大神帮忙分析分析...

liufudao 发表于 2017-4-18 23:39:49

_jahleel 发表于 2017-4-17 15:08
问了售后,串口助手勾选一下DTR再去掉就行

这到底是为什么
能够更清楚的解释一下吗

_jahleel 发表于 2017-4-20 23:18:25

liufudao 发表于 2017-4-18 23:39
这到底是为什么
能够更清楚的解释一下吗

DTR是数据终端设置,也就是把单片机和电脑进行连接,具体你可以百度一下。当然他视频里没有说,这是他的问题。而且他的视频做的确实比较差。

J-PING 发表于 2017-1-22 16:45:07

我下载他里面的例程,发送之后也没有回应。同求

zh4096 发表于 2017-2-20 19:09:24

一样啊没回复

zh4096 发表于 2017-2-20 19:45:00

看一下教程的pdf

southeast 发表于 2017-4-6 09:30:25

我的也没有

_jahleel 发表于 2017-4-13 18:31:01

J-PING 发表于 2017-1-22 16:45
我下载他里面的例程,发送之后也没有回应。同求

+1,准备去找售后

_jahleel 发表于 2017-4-17 15:08:29

问了售后,串口助手勾选一下DTR再去掉就行

liufudao 发表于 2017-4-18 23:35:19

我的也是没有回复,就是提供地程序也没反应

616819669 发表于 2017-4-19 22:00:51

把串口调试助手更新到最新,
页: [1] 2
查看完整版本: STM32的串口1通信问题