OpenEdv-开源电子网

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

STM32F103Zet6串口3发送错误

[复制链接]

3

主题

11

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2019-4-4
在线时间
11 小时
发表于 2019-7-20 11:56:37 | 显示全部楼层 |阅读模式
1金钱
我用使用库函数版,串口3发送数据0x80。我是用串口调试助手接收道德数据数0x00
  1. void Write_config(uint8_t address,uint16_t data)
  2. {
  3.                 uint8_t uart_date[2];
  4.                 uint16_t temp;
  5.                 temp = data;
  6.                 uart_date[0] = 0x6A;
  7.                         USART3_Sned_Char(0x80);  //我自己又封了串口发送函数,发送数据0x80结果串口调试助手接收到的是0x00
  8. }
复制代码
  1. <div>我自己封的串口3数据发送函数</div><div>void USART3_Sned_Char(uint8_t temp)      
  2. </div>{  
  3.                 while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET);
  4.     USART_SendData(USART3,temp);
  5. }
复制代码
QOR{@1N`4YCL6[39HU)7(E2.png
接收到的数据就是这样
请哪位大佬帮忙解决问题



最佳答案

查看完整内容[请看2#楼]

设置校验位那里的上位机 也要设置 还有那个位长也需要设置的
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

31

主题

2183

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
14422
金钱
14422
注册时间
2018-8-3
在线时间
1157 小时
发表于 2019-7-20 11:56:38 | 显示全部楼层
情绪小怪兽 发表于 2019-7-20 15:41
我仔细对了程序配置也都一样啊没啥问题啊,我在串口奇偶检验位部分设置的是偶校验,除了这真的没啥了

设置校验位那里的上位机 也要设置 还有那个位长也需要设置的
啊哈~加油!!
回复

使用道具 举报

3

主题

11

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2019-4-4
在线时间
11 小时
 楼主| 发表于 2019-7-20 11:58:05 | 显示全部楼层
  1. <div>这是我串口3的配置程序</div><div>void ATT59_init(u32 bound)
  2. </div>{
  3.   //GPIO端口设置
  4.   GPIO_InitTypeDef GPIO_InitStructure;
  5.         USART_InitTypeDef USART_InitStructure;
  6.         NVIC_InitTypeDef NVIC_InitStructure;
  7.          
  8.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);        //使能USART3,GPIOA时钟
  9.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);
  10.        
  11.         //USART3_RX   GPIOB.10
  12.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //PA.9
  13.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  14.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;        //复用推挽输出
  15.   GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIOA.9
  16.    
  17.   //USART3_TX          GPIOB.11初始化
  18.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;//PA10
  19.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
  20.   GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIOA.10  

  21.   //Usart3 NVIC 配置
  22.   NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
  23.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//抢占优先级3
  24.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;                //子优先级3
  25.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //IRQ通道使能
  26.         NVIC_Init(&NVIC_InitStructure);        //根据指定的参数初始化VIC寄存器
  27.   //NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
  28.   //USART 初始化设置

  29.         USART_InitStructure.USART_BaudRate = bound;//串口波特率
  30.         USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
  31.         USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位
  32.         USART_InitStructure.USART_Parity = USART_Parity_Even;//偶校验位
  33.         USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制
  34.         USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;        //收发模式

  35.   USART_Init(USART3, &USART_InitStructure);     //初始化串口3
  36.   USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);//开启串口接受中断
  37.   USART_Cmd(USART3, ENABLE);                    //使能串口3
  38. //        USART_ClearITPendingBit(USART3, USART_IT_RXNE);
  39.         printf("ATT59_init-ok\r\n");
  40. }

  41. uint8_t flag_send = 0;

  42. uint8_t Receive_buff[10] = {0,0,0,0};

  43. uint32_t Att_date;

  44. static u8 count= 0;

  45. void USART3_IRQHandler(void)                    //串口3中断服务程序
  46. {
  47.          if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)  
  48.    {   
  49.                
  50.                         Receive_buff[count] = USART_ReceiveData(USART3);        //读取接收到的数据
  51.                         printf("Receive_buff[%d]:%X\r\n",count,Receive_buff[count]);
  52.                         count++;
  53.                         if(count >=4){
  54. //                Att_date =  ((uint32_t)Receive_buff[0] << 16) |((uint32_t)Receive_buff[1] << 8)|((uint32_t)Receive_buff[2]);
  55.                                 count = 0;
  56.                                 flag_send = 1;
  57.                                 memset(Receive_buff,0,sizeof Receive_buff);
  58.                 }      
  59. }

  60. //                USART_ClearFlag(USART3,0);
  61. }
复制代码


回复

使用道具 举报

31

主题

2183

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
14422
金钱
14422
注册时间
2018-8-3
在线时间
1157 小时
发表于 2019-7-20 14:39:01 | 显示全部楼层
103ZET6  5个串口的代码都在这里 你参照下:http://www.openedv.com/forum.php?mod=viewthread&tid=289455
回复

使用道具 举报

3

主题

11

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2019-4-4
在线时间
11 小时
 楼主| 发表于 2019-7-20 15:09:22 | 显示全部楼层
翼行园子 发表于 2019-7-20 14:39
103ZET6  5个串口的代码都在这里 你参照下:http://www.openedv.com/forum.php?mod=viewthread&tid=289455

行,我试试
回复

使用道具 举报

3

主题

11

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2019-4-4
在线时间
11 小时
 楼主| 发表于 2019-7-20 15:41:20 | 显示全部楼层
翼行园子 发表于 2019-7-20 14:39
103ZET6  5个串口的代码都在这里 你参照下:http://www.openedv.com/forum.php?mod=viewthread&tid=289455

我仔细对了程序配置也都一样啊没啥问题啊,我在串口奇偶检验位部分设置的是偶校验,除了这真的没啥了
回复

使用道具 举报

3

主题

11

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2019-4-4
在线时间
11 小时
 楼主| 发表于 2019-7-20 22:17:53 | 显示全部楼层
翼行园子 发表于 2019-7-20 17:01
设置校验位那里的上位机 也要设置 还有那个位长也需要设置的

我设置接收的也是偶校验接收,但是就是出错,对了想请教你关于串口数据奇偶校验的作用,咋实现奇偶校验的
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 14:16

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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