串口1,2都成功了,但是,串口3无法收到数据(基于战舰V3)

2019-08-20 15:38发布

本帖最后由 yahopo 于 2016-3-7 00:26 编辑

如题。程序是基于战舰V3,(STM32_cortex-M3)

串口1,串口2,都成功了。串口3不行。波特率9600

有几个疑问:
1.是否,我的线接错了。

    ①我看了原理图,是不是串口3也是接在9针接口,然后转USB。
    ②如果①成立,那么我串口2,假如使用的是CMO8,那我串口3,是不是也是用COM8接收。(我电脑端也没其它COM端口了,另外一个COM7是串口1,试过了也不行)

程序测试:我现在,程序是利用M3向PC端循环发送0xFF。串口3毫无响应。

2.通过仿真。
    ①我的程序没有跑飞
    ②引脚属性正常

各位大神,我需要改动哪里???







友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
14条回答
yahopo
2019-08-21 00:27
本帖最后由 yahopo 于 2016-3-8 20:27 编辑


/* C 文件 */
#include "usart3.h"



/* 串口3: RXDB11 TXDB10 */



void usart3_init(u32 baud_rate)
{
        float USART_DIV;//串口波特率分频系数
        u16 DIV_Mantissa;//整数
        u16 DIV_Fraction;//小数
        
        /* 时钟·引脚配置 */
        RCC->APB2ENR |= 1<<3 ;//PB时钟
        
        GPIOB->CRH &= 0xffff00ff;
        GPIOB->CRH |= 0x00008900;//上拉输入  推挽输出10MHz
        GPIOB->ODR |= 1<<11;
        
        RCC->APB1ENR |= 1<<18;//串口3时钟_36MHZ
        
        /* 波特率 */
        USART_DIV = (float)36000000/16/baud_rate;//得出波特率系数:39.0625
        DIV_Mantissa = USART_DIV;
        DIV_Fraction = (USART_DIV - DIV_Mantissa)*16;//转16进制整数,才可以填入
        USART3->BRR = (DIV_Mantissa<<4) | (DIV_Fraction);
        
        /* 数据帧 */
        USART3->CR1 &= ~(1<<12);//8位数据位
        USART3->CR1 &= ~(1<<10);//关闭奇偶校验
        USART3->CR2 &= ~(0x3<<12);//1个停止位
        
        /* 全双工模式 */
        USART3->CR1 |= 1<<3;//允许发送
        USART3->CR1 |= 1<<2;//允许接收
        USART3->CR3 &= ~(1<<3);//不使用半双工

//        usart3_nvic_init();//接收缓冲区非空,触发中断

        USART3->CR1 |= 1<<13;//开启串口1        

}

void usart3_send_data(u8 data)
{
        while(!(USART3->SR & (1<<6)));//等待发送完成
        USART3->DR = data;
}








一周热门 更多>