你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

F103求助USART3无法工作,MDK仿真能够输出,但板子不能打印

[复制链接]
luokanx 提问时间:2016-12-28 17:13 /
阅读主题, 点击返回1楼
收藏 1 评论18 发布时间:2016-12-28 17:13
18个回答
luokanx 回答时间:2016-12-29 11:43:48

重新整理了一下,在9楼,10楼有进一步的描述,麻烦帮我看一下呗。
endsoing 回答时间:2016-12-29 12:06:25
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
抢占优先级设为最高级是否合适,高低一些试试。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

any012 回答时间:2016-12-29 12:29:42
确定单片机是否工作?比如用IO口先控制个LED亮灭。

晕了,我也是瞎说,既然能下载程序,那么单片机应该是正常工作的...
luokanx 回答时间:2016-12-29 13:45:49
程序没有错,是硬件连接上的问题。能用了。
luokanx 回答时间:2016-12-29 14:48:52
原来是在GPIO Config()里面没有开启总线时钟,里面加上这句就可以了。
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE);

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2 结贴奖励

查看全部评分

damiaa 回答时间:2016-12-29 15:14:21
zbber 回答时间:2016-12-29 16:13:55
重新整理了一下
andypanfan 回答时间:2016-12-30 09:05:26
  1. #ifndef __USART3_H
  2. #define __USART3_H

  3. #include "sys.h"
  4. #include "delay.h"
  5. #include "string.h"
  6. #include <stdlib.h>
  7. #include "time3.h"

  8. #define  TX3_buf_size        30
  9. #define  RX3_buf_size        30

  10. extern u8 USART3_RX_CNT;

  11. extern u8 USART3_RX_BUF[RX3_buf_size];
  12. extern u8 USART3_TX_BUF[TX3_buf_size];

  13. void usart3_init(u32 bound);
  14. void usart3_Send_Data(u8 *buf,u8 len);
  15. void clear_usart3_receive_buf(void);

  16. #endif


  17. #include "usart3.h"

  18. //#if 1
  19. //#pragma import(__use_no_semihosting)                              
  20. //struct __FILE
  21. //{
  22. //        int handle;

  23. //};

  24. //FILE __stdout;         
  25. //_sys_exit(int x)
  26. //{
  27. //        x = x;
  28. //}  
  29. //int fputc(int ch, FILE *f)
  30. //{      
  31. //        while((USART3->SR&0X40)==0);
  32. //    USART3->DR = (u8) ch;      
  33. //        return ch;
  34. //}
  35. //#endif

  36. u8 usart3_receive_data_flag=0;                                                                                                           
  37. u8 USART3_RX_CNT=0;                                                                                                                                     

  38. u8 USART3_RX_BUF[RX3_buf_size]={0};                                                                                                  
  39. u8 USART3_TX_BUF[TX3_buf_size]={0};                                                                                                  

  40. void usart3_init(u32 bound)
  41. {
  42.     GPIO_InitTypeDef GPIO_InitStructure;
  43.         USART_InitTypeDef USART_InitStructure;
  44.         NVIC_InitTypeDef NVIC_InitStructure;
  45.    
  46.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);                                                       
  47.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO, ENABLE);

  48.         USART_DeInit(USART3);
  49.    
  50.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;                                                                                 //USART3_TX   PB10
  51.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  52.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                                                                        //复用推挽输出
  53.     GPIO_Init(GPIOB, &GPIO_InitStructure);
  54.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;                                                                                //USART3_RX          PB11
  55.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;                                                        //浮空输入
  56.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  57.     GPIO_Init(GPIOB, &GPIO_InitStructure);
  58.     NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;                                                                //Usart3 NVIC 配置
  59.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;                                                //抢占优先级3
  60.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;                                                                //子优先级3
  61.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                                                        //IRQ通道使能
  62.         NVIC_Init(&NVIC_InitStructure);
  63.         USART_InitStructure.USART_BaudRate = bound;                                                                                //一般设置为9600;
  64.         USART_InitStructure.USART_WordLength = USART_WordLength_8b;                                                //字长为8位数据格式
  65.         USART_InitStructure.USART_StopBits = USART_StopBits_1;                                                        //一个停止位
  66.         USART_InitStructure.USART_Parity = USART_Parity_No;                                                                //无奇偶校验位
  67.         USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //无硬件数据流控制
  68.         USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;                                        //收发模式
  69.     USART_Init(USART3, &USART_InitStructure);                                                                                 //初始化串口
  70.     USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);                                                                        //开启中断
  71.     USART_Cmd(USART3, ENABLE);
  72. }

  73. void USART3_IRQHandler(void)                                                                                                //串口1中断服务程序
  74. {
  75.         unsigned char usart3_rece_dat=0;
  76.    
  77.         if(USART_GetITStatus(USART3, USART_IT_RXNE)==SET)                                                             //接收中断
  78.         {
  79.             usart3_rece_dat=USART_ReceiveData(USART3);
  80.                 if(USART3_RX_CNT<sizeof(USART3_RX_BUF))                                                                        //最多接收30个字节的数据
  81.                 {
  82.                         USART3_RX_BUF[USART3_RX_CNT]=usart3_rece_dat;                                                        //记录接收到的值
  83.                         USART3_RX_CNT++;                                                                                                                //接收数据增加1
  84.                 }                                                                                                                                        //USART_ReceiveData(USART1);
  85.    }
  86. }

  87. void usart3_Send_Data(u8 *buf,u8 len)
  88. {                                                                                               
  89.     u8 t;
  90.           for(t=0;t<len;t++)                                                                                                                                //循环发送数据
  91.         {                  
  92.                 while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET);          
  93.                 USART_SendData(USART3,buf[t]);
  94.         }         
  95.         while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET);                          
  96. }

  97. void clear_usart3_receive_buf(void)
  98. {
  99.         memset(USART3_RX_BUF,0,sizeof(USART3_RX_BUF));
  100.         USART3_RX_CNT=0;
  101. }

  102. 这是我以前测试过的代码  你看看!!!
复制代码

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

rowen800 回答时间:2016-12-30 16:57:50
检测串口打印那块的配置
12

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版