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

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, 下载次数: 2223)

评分

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

查看全部评分

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

举报

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

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

Nucleo411UART2.zip

下载

251 KB, 下载次数: 571

湛无双 回答时间:2015-6-12 10:07:08
本帖最后由 湛无双 于 2015-6-12 10:08 编辑
Yarcl 发表于 2015-6-10 22:25
请问下,这个板子能不能直接用下程序的串口来输出数据呀?需要外接USB转串口的转换器么?谢谢!! ...

如果是下载程序的串口 那么就可能你是说的用串口一了,答案是可以的,这样你就的外接一个USB转串口的东西了,其中串口一对应的引脚是PA9(TX),PA10(RX)。如果你的意思是使用那个板子上的下载器所虚拟出来的串口,那么就不能这么做了,下载器上所使用的串口是串口二,串口二对应的接口为PA2(TX),PA3(RX)。
然后我这里有一个工程,你可以直接选择下载进去,串口使用起来很方便的,就好像C语言里面的printf一样,举例:printf("Hello STM32 Nucleo!"); 就通过串口二向电脑输出了Hello STM32 Nucleo!

Nucleo411Model_后缀改7z.zip

下载

251 KB, 下载次数: 140

wolfgang 回答时间:2016-4-14 17:46:30
STM32F411一共有三个串口,分别是串口一,串口二和串口六。这个串口折腾了好多好多天,说多了都是泪,我一开始就上串口二,没想到串口二是个坑。

串口二也不完全是坑,可以用的,我用串口2很久了。
看看你的ST-LINK什么版本,建议升级到最新的ST-LINK V2-1  在电脑里有一个虚拟串口,或者用TTL转USB串口连接也能实现的。
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,感谢分享!
damiaa 回答时间:2015-2-6 22:39:50
好,不错。找到问题就好。
mlxy123xy 回答时间:2015-2-6 23:39:30
哪有F411。。。羡慕中。。。。
大浪10010 回答时间:2015-6-2 12:41:34
硬件需要改动吗,问什么printf不能执行,,,
大浪10010 回答时间:2015-6-2 12:41:49
硬件需要改动吗,问什么printf不能执行,,,  ,,
颩色四葉愺 回答时间:2015-6-9 17:41:18
大浪10010 发表于 2015-6-2 12:41
硬件需要改动吗,问什么printf不能执行,,,  ,,

是软件上printf不能执行,还是软件编译烧写了但是串口没接收到数据?  如果你用到串口二那样硬件上要改动一下,如果是软件上printf不能执行,那可能你没有勾选使用USB MicroLIB这个选项
12345下一页
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版