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

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

评分

参与人数 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, 下载次数: 577

湛无双 回答时间: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, 下载次数: 148

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 手机版