完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
调试完GPIO,就想调USART了,因为在单片机里边,串口一直扮演着很重要的角色。如今到了STM32,依然从USART开始。
从手册中看到,USART1 / 6这两个是连接到总线APB2上的,所以配置前提前使能总线时钟。 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); 接下来和stm32s2系列基本一样,配置USART1类型。 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,启用); /* 配置 USARTx_Tx 作为替代功能推挽 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_Init(GPIOB, &GPIO_InitStructure); /* 配置 USARTx_Rx 作为输入浮动 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOB,GPIO_PinSource6,GPIO_AF_USART1); GPIO_PinAFConfig(GPIOB,GPIO_PinSource7,GPIO_AF_USART1); 该说配置IO口了,手册手册 stm32f407_datasheet.pdf 看,USART1可以映射到PA9.10口,也可以映射到数据PB6.7口,这里选择的是PA9.10口上。配置IO口。 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,启用); /* 配置 USARTx_Tx 作为替代功能推挽 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); /* 配置 USARTx_Rx 作为输入浮动 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1); GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1); 用看倒不如的一个感觉,发现是一个小尖点,每次发送数据一个小尖点,细微,细查也不是IO口配置问题,无奈下TX映射到PB上,问题出来了,没问题。 难道是我的发现板子 PA9 烧了??还以为是发现原因! 原来,发现板子的 PA9 连接到了 USB otg 芯片的外端,并且!有一个 4.7uF 的电容电容失败!!!!! 大家请看原理图34页 发现原理图。pdf 果然,这样不会输出,竟然信号直接被演示了!不知道为什么这样设计!害我白费了这么长时间调串口! 好了,最后可以用的程序贴出来,main.c,用官方库开发的。 /* 包括 ----------------------------------------------- -------------------*/ #include “stm32f4_discovery.h” /** @addtogroup STM32F4_Discovery_Peripheral_Examples * @{ */ /** @addtogroup IO_Toggle * @{ */ /* 私有 typedef ---------------------------------------------- -------------*/ GPIO_InitTypeDef GPIO_InitStructure; /* 私有定义---------------------------------------------- --------------*/ /* Private macro -------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ /* Private function prototypes -----------------------------------------------*/ void Delay(__IO uint32_t nCount); /* Private functions ---------------------------------------------------------*/ /** * @brief Main program * @param None * @retval None */ void USART1_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); /* Configure USARTx_Tx as alternate function push-pull */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_Init(GPIOB, &GPIO_InitStructure); /* Configure USARTx_Rx as input floating */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOB,GPIO_PinSource6,GPIO_AF_USART1); GPIO_PinAFConfig(GPIOB,GPIO_PinSource7,GPIO_AF_USART1); RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); USART_InitStructure.USART_BaudRate = 115200; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART1, &USART_InitStructure); USART_Cmd(USART1, ENABLE); } int main(void) { USART1_Configuration(); /* GPIOD Periph clock enable */ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE); /* Configure PD12, PD13, PD14 and PD15 in output pushpull mode */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13| GPIO_Pin_14| GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd =GPIO_PuPd_UP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(GPIOD, &GPIO_InitStructure); while (1) { USART_SendData(USART1,55); /* PD13 to be toggled */ GPIO_SetBits(GPIOD, GPIO_Pin_13); Delay(0x3FFFf); GPIO_ResetBits(GPIOD, GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15); Delay(0xFFFFF); } } /** * @brief Delay Function. * @param nCount:specifies the Delay time length. * @retval None */ void Delay(__IO uint32_t nCount) { while(nCount--) { } } #ifdef USE_FULL_ASSERT /** * @brief 报告源文件名和源行号 * 发生 assert_param 错误的地方。 * @param file: 指向源文件名的指针 * @param line: assert_param 错误行源码号 * @retval 无 */ void assert_failed(uint8_t* 文件,uint32_t 行) { /* 用户可以添加自己的实现来报告文件名和行号, 例如: printf(“错误的参数值:文件 %s 行 %drn”, file, line) */ /* 无限循环 */ 而 (1) { } } #万一 /** * @} */ /** * @} */ /******************* (C) COPYRIGHT 2011 STMicroelectronics *****文件结束****/ |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1810 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1631 浏览 1 评论
1098 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
737 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1687 浏览 2 评论
1945浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
749浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
584浏览 3评论
604浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
567浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-29 09:34 , Processed in 0.659764 second(s), Total 76, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号