基于STM32F429-Discovery USART1 PA9 PA10 调试成功

发布者:lambda21最新更新时间:2017-10-02 来源: eefocus关键字:STM32F429  USART 手机看文章 扫描二维码
随时随地手机看文章

原则上,像USART1等这些基本的外设,根据官方的库,应该直接成功了,可是,我试了一下,就是不成功。虽然有STM32F10X的基础,但是感觉打印的就是乱码,并且发送时,竟然中断接收函数里,中断进不了!!


后来查看原理图,原来STLink V2有引脚与PA9 PA10连接。应该是USB转串口吧,因此,再把USB-TTL 接到PA9 PA10上,就会发生 两个TXD->TXD相互干扰的现象,因此不通!!我这里直接去掉连接的短接电阻,程序正常了。




注意开始时需要修改一下库里的晶振设置:8M外部晶振与PLL_M=8。官方库好像是基于25MHz晶振的,但是实际的焊接的为:8MHz晶振。



修改后:测试成功了。收发正常了。


  1. /********************     (C)  2016     *************************** 

  2.  * 文件名  :usart1.c 

  3.  * 描述       :将printf函数重定向到USART3。这样就可以用printf函数将单片机的数据 

  4.  *            打印到PC上的超级终端或串口调试助手。          

  5.  * 实验平台 :STM32F429 

  6.  * 硬件连接 :------------------------ 

  7.  *          | PA9  - USART1(Tx)      | 

  8.  *          | PA10  - USART1(Rx)      | 

  9.  *           ------------------------ 

  10.  * 库版本      :V1.6.1 

  11.  * 编写日期 :2016-05-22 

  12.  * 修改日期 : 

  13.  * 作者       : 

  14. *****************************************************************************/  

  15. #include "usart1.h"  

  16. #include 

  17.   

  18. /* 

  19.  * 函数名:USART1_Config 

  20.  * 描述  :USART1 GPIO 配置 

  21.  * 输入  :uint32_t uBaud 

  22.  * 输出  : 无 

  23.  * 调用  :外部调用 

  24.  */  

  25. void USART1_Config(uint32_t uBaud)  

  26. {  

  27.     USART1_Configuration(uBaud);  

  28.     USART1_NVIC_Configuration();  

  29. }  

  30.   

  31.   

  32. /* 

  33.  * 函数名:USART1_Configuration 

  34.  * 描述  :USART1 GPIO 配置,工作模式配置。uBaud 8-N-1 

  35.  * 输入  :uint32_t uBaud 

  36.  * 输出  : 无 

  37.  * 调用  :外部调用 

  38.  */  

  39. void USART1_Configuration(uint32_t uBaud)  

  40. {  

  41.     GPIO_InitTypeDef GPIO_InitStructure;  

  42.     USART_InitTypeDef USART_InitStructure;  

  43.       

  44.     /* config USART1 clock */  

  45.   

  46.     RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);  

  47.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 , ENABLE);  

  48.       

  49.     GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1);     

  50.   GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_USART1);  

  51.       

  52.     /* USART1 GPIO config */  

  53.     /* Configure USART1 Tx (PA.9) as alternate function push-pull */  

  54.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;  

  55.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;  

  56.     //GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;  

  57.     //GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;  

  58.     //GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  

  59.     GPIO_Init(GPIOA, &GPIO_InitStructure);      

  60.     /* Configure USART1 Rx (PA.10) as input floating */  

  61.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;  

  62.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;  

  63.     //GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;  

  64.     //GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;  

  65.     //GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  

  66.     GPIO_Init(GPIOA, &GPIO_InitStructure);  

  67.         

  68.     /* USART1 mode config */  

  69.     USART_InitStructure.USART_BaudRate = uBaud;  

  70.     USART_InitStructure.USART_WordLength = USART_WordLength_8b;  

  71.     USART_InitStructure.USART_StopBits = USART_StopBits_1;  

  72.     USART_InitStructure.USART_Parity = USART_Parity_No ;  

  73.     USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;  

  74.     USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;  

  75.     USART_Init(USART1, &USART_InitStructure);   

  76.     USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);  

  77.     USART_Cmd(USART1, ENABLE);  

  78. }  

  79.   

  80.   

  81. void USART1_NVIC_Configuration(void)  

  82. {  

  83.     NVIC_InitTypeDef NVIC_InitStructure;   

  84.     /* Configure the NVIC Preemption Priority Bits */    

  85.     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);  

  86.       

  87.     /* Enable the USARTy Interrupt */  

  88.     NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;      

  89.     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;  

  90.     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;  

  91.     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  

  92.     NVIC_Init(&NVIC_InitStructure);  

  93. }  

  94.   

  95.   

  96.   

  97. /* 

  98.  * 函数名:fputc 

  99.  * 描述  :重定向c库函数printf到USART1 

  100.  * 输入  :无 

  101.  * 输出  :无 

  102.  * 调用  :由printf调用 

  103.  */  

  104. int fputc(int ch, FILE *f)  

  105. {  

  106.     /* 将Printf内容发往串口 */  

  107.     USART_SendData(USART1, (unsigned char) ch);  

  108.     while (!(USART1->SR & USART_FLAG_TXE));  

  109.     //while( USART_GetFlagStatus(USART1,USART_FLAG_TC)!= SET);    

  110.     return (ch);  

  111. }  


  1. /** 

  2.   * @brief  This function handles USART1 Handler. 

  3.   * @param  None 

  4.   * @retval None 

  5.   */  

  6. void USART1_IRQHandler(void)  

  7. {  

  8.     uint8_t c;  

  9.     if(USART_GetITStatus(USART1,USART_IT_RXNE))  

  10.     {  

  11.       USART_ClearITPendingBit(USART1, USART_IT_RXNE);  

  12.         c=(uint8_t)USART_ReceiveData(USART1);     

  13.         printf("%c",c);  

  14.     }  

  15. }  




关键字:STM32F429  USART 引用地址:基于STM32F429-Discovery USART1 PA9 PA10 调试成功

上一篇:STM32F103 GPIO的外部中断的使用例子
下一篇:STM32F429的定时器的使用方法

推荐阅读最新更新时间:2024-03-16 15:39

stm32f4USART中USB转串口通信
初学stm32,初次接触USART串口通信。 对USART通信硬件原理的个人总结。从MCU(Micro Controller Unit,也就是ST芯片)出来的TTL电平经过电平转换芯片转化为USB电平,从而实现与PC的通信。 USART(Universal Synchronous/Asynchronous Receiver/Transmitter)通用同步/异步串行接收/发送器。 这边只作异步通信说,异步通信与同步通信的主要区别区别是时钟,所以这边的SLCK是关闭的。USART总共有TX、RX、nRTS、nCTS、SCLK这5个外接引脚(框图中的SW_RX在内部,n表示低电平有效)。在学习与PC上位机通信时,是关闭硬件流控制模式的
[单片机]
【STM32Cube_06】使用USART发送和接收数据(查询模式)
1. 准备工作 硬件准备 首先需要准备一个开发板,这里我准备的是STM32L4的开发板(BearPi): 软件准备 需要安装好Keil - MDK及芯片对应的包,以便编译和下载生成的代码; 准备一个串口调试助手,这里我使用的是Serial Port Utility; 2.生成MDK工程 选择芯片型号 打开STM32CubeMX,打开MCU选择器: 搜索并选中芯片STM32L431RCT6: 配置时钟源 如果选择使用外部高速时钟(HSE),则需要在System Core中配置RCC; 如果使用默认内部时钟(HSI),这一步可以略过; 这里我都使用外部时钟: 配置串口 小熊派开发板板载ST-Lin
[单片机]
【STM32Cube_06】使用<font color='red'>USART</font>发送和接收数据(查询模式)
STM32F0xx_USART收发配置详细过程
前言 串口对于处理器来说算是一种标配,也是在软件开发中必不可少的,那就是使用串口来调试信息(打印出相应的信息)。STM32F0系列的芯片,串口根据型号不同,数量也不同,从1个到8个不等。 今天主要总结串口简单且常用的功能,发送字符和中断接收字符。今天提供的串口发送功能将在后面的各个模块总结中都需要使用到,主要用于验证和测试各项功能的正确性。 下载 ST标准外设库和参考手册、数据手册等都可以在ST官网下载,你也可以到我的360云盘下载。关于F0系列芯片的参考手册有多个版本(针对F0不同芯片),但有一个通用版本,就是“STM32F0x128参考手册V8(英文)2015-07”建议参考该手册,以后如果你换用一种型号芯片也方便了解
[单片机]
STM32F0xx_<font color='red'>USART</font>收发配置详细过程
第44章 STM32F429的LTDC应用之LCD电阻触摸和电容触摸
44.1 初学者重要提示 学习本章节前,务必优先学习第40章,需要对LTDC的基础知识和HAL库的几个常用API有个认识。 LTDC驱动设计和相关问题在第41章有详细说明。 电阻触摸支持2点和4点校准,而电容屏无需校准。 电阻触摸校准解决的是触摸板的线性度问题,而飞点要另外处理,当前程序已经做了支持。总的来说,V6配套的电阻触摸方案已经比较成熟,可以放心用于项目。 44.2 电阻触摸和电容触摸相关知识 这部分知识点在第42章的2.2小节有详细说明,必看。 44.3 电阻屏硬件设计 电阻触摸STMPE811的原理图如下: 通过STMPE811的原理图要了解以下几点: I2C的两根通信线I2C_SCL和I2
[单片机]
第44章 <font color='red'>STM32F429</font>的LTDC应用之LCD电阻触摸和电容触摸
ATmega32 USART的初始化
ATmega32 在进行通信之前首先要对 USART 进行初始化。初始化过程通常包括波特率的设定,帧结构的设定,以及根据需要使能接收器或发送器。对于中断驱动的 USART 操作,在初始化时首先要清零全局中断标志位 ( 全局中断被屏蔽 )。 重新改变 USART 的设置应该在没有数据传输的情况下进行。TXC 标志位可以用来检验一个数据帧的发送是否已经完成, RXC 标志位可以用来检验接收缓冲器中是否还有数据未读出。在每次发送数据之前 ( 在写发送数据寄存器 UDR 前 )TXC 标志位必须清零。 以下是 USART 初始化程序示例。例程采用了轮询 ( 中断被禁用 )的异步操作,而且帧结构是固定的。波特率作为函数参数给出。在汇编程序里
[单片机]
ATmega32 <font color='red'>USART</font>的初始化
STM32F429接MAX6675读取热电偶温度
第一次编写STM32程序,有很多问题请教,我想把MAX6675的SO的数据读出来转换成实际温度,用串口工具读出来。 是不是还有哪些没配置好?小弟刚开始弄这个,着急用,在此感谢了! #include sys.h #include delay.h #include usart.h #define SPI1_CS_Pin GPIO_PIN_4 void Delay(__IO uint32_t nCount); void Delay(__IO uint32_t nCount) { while(nCount--){} } int main(void) { uint16_t
[单片机]
<font color='red'>STM32F429</font>接MAX6675读取热电偶温度
stm32专题十一:USART(二)结构框图
USART的结构框图 引脚: TX RX 发送和接收 SW-_RX 用于智能卡模式(很少用) IRDA_OUT IRDA_IN 红外通信数据的输出和输入 nRTS nCTS 硬件流控,很少用 SCLK 同步时钟(同步模式下使用) USART的引脚分配如下表,注意,只有USART1挂载到APB2高速总线上,其他的串口都是在APB1总线。 数据寄存器:USART_DR,是一个对应两个寄存器(USART_TDR和USART_RDR),寄存器的低9位 位数据有效,由USART_CR1的M位设置,当M = 0时,表示8个数据位(最常用),M = 1时表示9个数据位(很少用)。因为有两个寄存器,所以TX和RX可
[单片机]
stm32专题十一:<font color='red'>USART</font>(二)结构框图
STM32串口USART2程序
简介:对控制LED指示灯的IO口进行了初始化,将端口配置为推挽上拉输出,口线速度为50Mhz。PA2,PA2端口复用为串口2的TX,RX。在配置某个口线时,首先应对它所在的端口的时钟进行使能。否则无法配置成功,由于用到了端口B, 因此要对这个端口的时钟。进行使能,同时由于用到复用IO口功能用于配置串口。因此还要使能AFIO(复用功能IO)时钟。 原理图: 程序分析: int main(void) { uint8_t a=0; /* System Clocks Configuration */ RCC_Configuration();//系统时钟设置 /*嵌套向量中断控制器 说明了U
[单片机]
STM32串口<font color='red'>USART</font>2程序
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved