请选择 进入手机版 | 继续访问电脑版
搜索
查看: 2896|回复: 10

[求助] STM32串口发送,发送一个字符,发送和接收的数据不同,

[复制链接]

该用户从未签到

1

主题

5

帖子

0

蝴蝶豆

新手上路

最后登录
2020-10-2
发表于 2020-9-28 11:38:38 | 显示全部楼层 |阅读模式
void usart_Config(void)
{
        /*----------------串口配置----------------*/       
        GPIO_InitTypeDef         GPIO_Struct;
        USART_InitTypeDef        USART_Struct;
        NVIC_InitTypeDef        USART_NVIC_Struct;
        //打开gpio时钟和串口时钟使能
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
        //配置复用功能       
        GPIO_PinAFConfig(GPIOB,GPIO_PinSource10, GPIO_AF_USART3);
        GPIO_PinAFConfig(GPIOB,GPIO_PinSource11 , GPIO_AF_USART3);
        //gpio初始化
        GPIO_Struct.GPIO_Pin    = GPIO_Pin_10 | GPIO_Pin_11;
        GPIO_Struct.GPIO_Mode   = GPIO_Mode_AF;
        GPIO_Struct.GPIO_OType  = GPIO_OType_PP;
        GPIO_Struct.GPIO_PuPd   = GPIO_PuPd_UP;
        GPIO_Struct.GPIO_Speed  = GPIO_Speed_50MHz;
       
        //把结构体初始化参数传给寄存器
        GPIO_Init(GPIOB, &GPIO_Struct);
       
        /*----------------串口配置-------------------*/
       
        USART_Struct.USART_BaudRate = 115200;
        USART_Struct.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
        USART_Struct.USART_Mode =  USART_Mode_Tx;
        USART_Struct.USART_Parity = USART_Parity_No;
        USART_Struct.USART_StopBits = USART_StopBits_1;
        USART_Struct.USART_HardwareFlowControl = USART_HardwareFlowControl_None ;
       
        USART_Init(USART3, &USART_Struct);
        USART_Cmd(USART3, ENABLE);
        //使能串口接收中断       

        USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);         //开启相关中断
       
        USART_NVIC_Struct.NVIC_IRQChannel =  USART3_IRQn ;
        USART_NVIC_Struct.NVIC_IRQChannelPreemptionPriority =3;
        USART_NVIC_Struct.NVIC_IRQChannelSubPriority = 3;
       USART_NVIC_Struct.NVIC_IRQChannelCmd = ENABLE;
       
        NVIC_Init(&USART_NVIC_Struct);
}

void USART_SendByte(USART_TypeDef* USARTx, uint8_t Data)
{
        USART_SendData(USARTx, Data);
        while (USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET);
}

//main函数
int main(void)
{
        NVIC_PriorityGroupConfig( NVIC_PriorityGroup_2 );
        usart_Config();

        USART_SendByte(USART3, 0xFF);
        while(1);
}

使用的市stm32f407系列的,使用串口3.USB转串口使用的市CP2102芯片。发送的数据和接收的数据不同。一直没找到原因。请求大神帮助。

回复

使用道具 举报

该用户从未签到

0

主题

587

帖子

82

蝴蝶豆

金牌会员

最后登录
2024-1-2
发表于 2020-9-28 13:05:02 | 显示全部楼层

回帖奖励 +1 ST金币

上位机的波特率是不是一致,显示方式是不是16进制
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

5

帖子

0

蝴蝶豆

新手上路

最后登录
2020-10-2
 楼主| 发表于 2020-9-28 13:11:13 | 显示全部楼层
陌路夕颜 发表于 2020-9-28 13:05
上位机的波特率是不是一致,显示方式是不是16进制

波特率一致,几个波特率都试了,显示方式位16进制。这些都检查确认多次,没有问题。
回复 支持 反对

使用道具 举报

该用户从未签到

5

主题

613

帖子

138

蝴蝶豆

金牌会员

最后登录
2022-5-19
发表于 2020-9-28 13:29:59 | 显示全部楼层
这句只是接收中断开启: USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);         //开启相关中断
相关的 USART3_IRQHandler没有吧??
还应加上发送中断开启【上句后】        USART_ITConfig(USART3, USART_IT_TC, ENABLE);
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

5

帖子

0

蝴蝶豆

新手上路

最后登录
2020-10-2
 楼主| 发表于 2020-9-28 14:56:50 | 显示全部楼层
mikecai 发表于 2020-9-28 13:29
这句只是接收中断开启: USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);         //开启相关中断
相关的  ...

我上面市写了接收中断,但是我没有用,因为我只是发送,发送不用中断的啊。所以目前也不用写中断程序。
回复 支持 反对

使用道具 举报

该用户从未签到

133

主题

4688

帖子

239

蝴蝶豆

版主

最后登录
2021-4-10
发表于 2020-9-28 15:31:27 | 显示全部楼层
楼主,问一下你的串口3的TX和CP2102的RX之间是直连的吗?
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

5

帖子

0

蝴蝶豆

新手上路

最后登录
2020-10-2
 楼主| 发表于 2020-9-28 18:40:37 | 显示全部楼层
安 发表于 2020-9-28 15:31
楼主,问一下你的串口3的TX和CP2102的RX之间是直连的吗?

交叉连的。还接了一个0v。
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

5

帖子

0

蝴蝶豆

新手上路

最后登录
2020-10-2
 楼主| 发表于 2020-9-29 14:58:14 | 显示全部楼层
谢谢大家的回答,目前,这个问题已经解决。现分享给大家,仅供参考:
1.首先我用的模板程序使用的外部晶振为25M的。但是我自己实验用的板子使8M的,发现这是导致问题发生的根本。
2,如何修改使内部参数符合外部晶振
修改的地方一:搜索HSE_VALUE宏定义,在stm32f4xx.h里面的HSE_VALUE,系统默认采用外部8M或者25M晶振,把它改成所使用板子的外部晶振对应的值。所以 #define HSE_VALUE    ((uint32_t)8000000) ,或者#define HSE_VALUE    ((uint32_t)25000000)  。我这个例子中把25M改成8M.

修改的地方二:搜索PLL_M宏定义,修改宏定义的值,因为M407锁相环的分频因子为PLL_M=8,PLL_N336,PLL_P=2.而模板中的分频因子分别为25,360,2.所以,我的这个例子,是把PLL_M=25改成8,改完ok。
回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

4

帖子

0

蝴蝶豆

新手上路

最后登录
2020-9-30
发表于 2020-9-30 09:30:31 | 显示全部楼层
新手上路学习了
回复 支持 反对

使用道具 举报

该用户从未签到

3

主题

1306

帖子

929

蝴蝶豆

版主

最后登录
2021-3-31
发表于 2020-10-13 17:17:15 | 显示全部楼层
谢谢分享。主系统时钟运行定义与实际差别,最后配置波特率与预估值不一致。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

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

Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

GMT+8, 2024-3-29 22:52 , Processed in 0.185736 second(s), 38 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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