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

STM32F411【Nucleo】第六课--串口通信(基于keil5.13)  

[复制链接]
颩色四葉愺 发布时间:2015-2-4 20:33
本帖最后由 颩色四葉愺 于 2015-2-4 20:35 编辑

STM32F411一共有三个串口,分别是串口一,串口二和串口六。这个串口折腾了好多好多天,说多了都是泪,我一开始就上串口二,没想到串口二是个坑!!!!!使劲调都调不通,最后还是放弃先,之后试了试串口一和串口六,一试就通!   

别跟我说是不是硬件问题,或者说是不是串口二的时钟没开之类的!都不是!!!!!我调通串口一和串口六之后,试了试用stn32的专用库来试试,我擦想死的心都有,一下就成了!!!别烦我先,我一个人想静静,别问静静是谁!     为什么标准库不行!!!!请广大网友解决这个问题能发发善心告诉我,这里我奉上我调通的三个串口源码。(串口一和串口六我都写好接收中断了,串口二仅仅写好了发送的没写接收的)
(1)建立工程,新建工程的步骤就不说了!请参考我之前的帖子:
STM32F411【Nucleo】第一课--新建工程(基于keil 5.13)
(2)新建bsp_usart.c和bsp_usart.h
bsp_usart.c
  1. #include "bsp_usart.h"
  2. void NVIC_USART1_Config(void)
  3. {
  4.         NVIC_InitTypeDef NVIC_InitStructure;
  5.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
  6.         
  7.         NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQn;
  8.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x00;
  9.         NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x02;
  10.         NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
  11.         NVIC_Init(&NVIC_InitStructure);
  12. }

  13. void USART1_Config(void)
  14. {
  15.         GPIO_InitTypeDef GPIO_InitStructure;
  16.         USART_InitTypeDef USART_InitStructure;
  17.         
  18.         
  19.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA , ENABLE);
  20.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
  21.         //串口1对应引脚复用映射
  22.         GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1);
  23.         GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_USART1);
  24.         
  25.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_10;
  26.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  27.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  28.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  29.         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  30.         GPIO_Init(GPIOA, &GPIO_InitStructure);            
  31.                         
  32.         NVIC_USART1_Config();

  33.         USART_InitStructure.USART_BaudRate=115200;
  34.         USART_InitStructure.USART_WordLength=USART_WordLength_8b;
  35.         USART_InitStructure.USART_StopBits=USART_StopBits_1;
  36.         USART_InitStructure.USART_Parity=USART_Parity_No;
  37.         USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
  38.         USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
  39.         
  40.         USART_Init(USART1,&USART_InitStructure);
  41.         
  42.         USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
  43.         
  44.         USART_Cmd(USART1,ENABLE);        
  45. }
  46. /// 重定向c库函数printf到USART1
  47. int fputc(int ch, FILE *f)
  48. {
  49.                 /* 发送一个字节数据到USART1 */
  50.                 USART_SendData(USART1, (uint8_t) ch);
  51.                
  52.                 /* 等待发送完毕 */
  53.                 while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);               
  54.         
  55.                 return (ch);
  56. }

  57. /// 重定向c库函数scanf到USART1
  58. int fgetc(FILE *f)
  59. {
  60.                 /* 等待串口1输入数据 */
  61.                 while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);

  62.                 return (int)USART_ReceiveData(USART1);
  63. }
  64. /*********************************************END OF FILE**********************/
复制代码

bsp_usart.h
  1. #ifndef _BSP_USART_H_
  2. #define _BSP_USART_H_

  3. #include "stm32f4xx.h"
  4. #include <stdio.h>
  5. void USART1_Config(void);
  6. #endif
复制代码

(3)修改stm32f4xx_it.c
  1. void USART1_IRQHandler(void)
  2. {
  3.         char c;
  4.         if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
  5.         {
  6.                 c=USART_ReceiveData(USART1);
  7.                 USART_SendData(USART1,c);
  8.         }
  9. }
复制代码

编译下载后利用USB转串口下载器进行通信(大家可以利用市面上的开发板的串口部分),打开串口助手后,给板子复位后
QQ截图20150204201823.png


温馨提示,如果你要用串口二则板子的A2 和A3外引接口是没有跟MCU链接的   不过ST-link中的RX ,TX就是连上MCU的串口二的  我们也可以往这连!
QQ截图20150204203031.png
QQ截图20150204203138.png
串口1.zip (8.55 MB, 下载次数: 2191)

评分

参与人数 2 ST金币 +4 收起 理由
舍与得 -1
努力的人 + 5 赞一个!

查看全部评分

1 收藏 8 评论57 发布时间:2015-2-4 20:33

举报

57个回答
湛无双 回答时间:2015-2-5 10:13:49
颩色四葉愺 发表于 2015-2-4 22:14
标准库写的  还是HAL库   我用HAL库写的也没问题啊   用标准库写的就出问题了 ...

你看吧 这个是我已经用串口二成功的了USART2的例程 硬件保持刚回来的样子 不用修改任何地方即可 附件后缀改7Z后解压

Nucleo411UART2.zip

下载

251 KB, 下载次数: 530

wu1169668869 回答时间:2015-2-4 21:10:09
针对板子特性写的!!!
支持一下
湛无双 回答时间:2015-2-4 21:29:10
我的用串口二就可以成功呀!!! 可能是楼主配置什么有问题吧!
颩色四葉愺 回答时间:2015-2-4 22:14:18
湛无双 发表于 2015-2-4 21:29
我的用串口二就可以成功呀!!! 可能是楼主配置什么有问题吧!

标准库写的  还是HAL库   我用HAL库写的也没问题啊   用标准库写的就出问题了
lkl0305 回答时间:2015-2-4 22:50:03
多谢分享
lovemcu123 回答时间:2015-2-4 23:00:41
图文并茂,赞一个,总结的很不错!
颩色四葉愺 回答时间:2015-2-5 13:55:31
湛无双 发表于 2015-2-5 10:13
你看吧 这个是我已经用串口二成功的了USART2的例程 硬件保持刚回来的样子 不用修改任何地方即可 附件后缀 ...

好像找到原因了。我再研究研究   谢谢你了
湛无双 回答时间:2015-2-5 21:43:58
颩色四葉愺 发表于 2015-2-5 13:55
好像找到原因了。我再研究研究   谢谢你了

没事 能用就行了 嘿嘿 相互学习。。。
星辰一方 回答时间:2015-2-6 21:30:25
还没学到USART,感谢分享!

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似技术帖

官网相关资源

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