OpenEdv-开源电子网

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

F103RET串口发送数据

[复制链接]
回帖奖励 6 金钱 回复本帖可获得 1 金钱奖励! 每人限 1 次

4

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
141
金钱
141
注册时间
2016-8-26
在线时间
31 小时
发表于 2017-5-26 20:01:28 | 显示全部楼层 |阅读模式
用STM32F103RCT6串口4能发数据。
改成
STM32F103RET6(管脚兼容,容量大些)
同样的程序就发不出数据了。这是为啥?(相同的程序RCT6就能发送)
卡死在

_INT32 UART4_SendChar(_UINT8 chr)
{
    while((UART4->SR&0X40)==0)
        ;
    UART4->DR = chr;
    return OK;
}
UART4->SR = 0x0080, 怪了不?有没有高手帮忙分析一下啊。

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

使用道具 举报

11

主题

94

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
236
金钱
236
注册时间
2015-6-7
在线时间
39 小时
发表于 2017-5-27 09:20:53 | 显示全部楼层

回帖奖励 +1 金钱

我用的ret6  不过没用过串口4
你的端口配置正确吗?时钟什么的?
回复 支持 反对

使用道具 举报

4

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
141
金钱
141
注册时间
2016-8-26
在线时间
31 小时
 楼主| 发表于 2017-5-27 21:33:32 | 显示全部楼层
那个应该没错误吧。RCT6用起来都正常。改成RET6就不行了。
void UART4_Init(_UINT32 bound)
{  

    GPIO_InitTypeDef GPIO_InitStructure;
    USART_InitTypeDef USART_InitStructure;
    NVIC_InitTypeDef NVIC_InitStructure;

   
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4,ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);        // GPIOB时钟

    //USART_DeInit(UART4);  //复位串口4
    //USART4_TX   PB.C0
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //PA.2
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;        //复用推挽输出
    GPIO_Init(GPIOC, &GPIO_InitStructure);

    //USART4_RX          PC.11
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
    GPIO_Init(GPIOC, &GPIO_InitStructure);  

    USART_InitStructure.USART_BaudRate = bound;//一般设置为9600;
    USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
    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(UART4, &USART_InitStructure); //初始化串口        4


    NVIC_InitStructure.NVIC_IRQChannel = UART4_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2 ;//抢占优先级2
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;                //子优先级2
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //IRQ通道使能
    //使能接收中断
    USART_ITConfig(UART4, USART_IT_RXNE, ENABLE);//开启中断   
    USART_Cmd(UART4, ENABLE);                    //开中断
    USART_ClearFlag(UART4, USART_FLAG_TC);       //清除标志
    NVIC_Init(&NVIC_InitStructure);        //根据指定的参数初始化VIC寄存器

}


_INT32 UART4_SendChar(_UINT8 chr)
{
    while((UART4->SR&0X40)==0)
        ;
    UART4->DR = chr;
    return OK;
}

_INT32 UART4_SendData(_UINT8 *data, int len)
{
    int i = 0;
    for(i=0; i<len; i++)
    {
        UART4_SendChar(data[i]);
    }
    while(USART_GetFlagStatus(UART4, USART_FLAG_TC) == RESET);
    while(USART_GetFlagStatus(UART4, USART_FLAG_TXE)==RESET)
    {
        USART_ClearITPendingBit(UART4 ,USART_IT_TXE);
    }
    return OK;   
}
回复 支持 反对

使用道具 举报

0

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2014-8-17
在线时间
20 小时
发表于 2017-5-28 09:46:46 | 显示全部楼层

回帖奖励 +1 金钱

看看硬件有没有虚焊什么的,首先确定硬件没问题
回复 支持 反对

使用道具 举报

32

主题

883

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4036
金钱
4036
注册时间
2015-11-14
在线时间
545 小时
发表于 2017-5-29 08:01:39 | 显示全部楼层

回帖奖励 +1 金钱

帮顶  
回复 支持 反对

使用道具 举报

0

主题

103

帖子

0

精华

高级会员

Rank: 4

积分
632
金钱
632
注册时间
2016-3-30
在线时间
67 小时
发表于 2017-5-30 23:03:08 | 显示全部楼层

回帖奖励 +1 金钱

如果硬件没有问题,就看看软件。
在最开始发送前,把串口标志位清除掉。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-8-20 17:52

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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