完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
用的107的芯片 pD5 Pd6 重映射USART2 的tx 和 rx A9是MAX3485的使能端 但是485一直调不通 贴下程序请各位大神看看指教下,多谢了。
int main(void) { //u8 temp=0; RCC_Configuration(); Usart2_Remap(); GPIO_Configuration(); USART2_Configuration(); //NVIC_Configuration(); GPIO_ResetBits(GPIOA,GPIO_Pin_5); while(1) { GPIO_SetBits(GPIOA,GPIO_Pin_9); //接收中断 if(USART_GetITStatus(USART2,USART_IT_RXNE)!= RESET) { temp=USART_ReceiveData(USART2); GPIO_ResetBits(GPIOA,GPIO_Pin_9); delay_ms(1); USART_SendData(USART2,0x55); //发送寄存器标志为空 while(USART_GetFlagStatus(USART2,USART_FLAG_TXE)==RESET); delay_ms(2); GPIO_ResetBits(GPIOA,GPIO_Pin_9); } } } /************************************************* 函数: void RCC_Configuration(void) 功能: 复位和时钟控制 配置 参数: 无 返回: 无 **************************************************/ void RCC_Configuration(void) { ErrorStatus HSEStartUpStatus; //定义外部高速晶体启动状态枚举变量 RCC_DeInit(); //复位RCC外部设备寄存器到默认值 RCC_HSEConfig(RCC_HSE_ON); //打开外部高速晶振 HSEStartUpStatus = RCC_WaitForHSEStartUp(); //等待外部高速时钟准备好 if(HSEStartUpStatus == SUCCESS) //外部高速时钟已经准别好 { FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //开启FLASH预读缓冲功能,加速FLASH的读取。所有程序中必须的用法.位置:RCC初始化子函数里面,时钟起振之后 FLASH_SetLatency(FLASH_Latency_2); //flash操作的延时 RCC_HCLKConfig(RCC_SYSCLK_Div1); //配置AHB(HCLK)时钟等于==SYSCLK RCC_PCLK2Config(RCC_HCLK_Div1); //配置APB2(PCLK2)钟==AHB时钟 RCC_PCLK1Config(RCC_HCLK_Div2); //配置APB1(PCLK1)钟==AHB1/2时钟 RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); //配置PLL时钟 == 外部高速晶体时钟 * 9 = 72MHz RCC_PLLCmd(ENABLE); //使能PLL时钟 while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) //等待PLL时钟就绪 { } RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //配置系统时钟 = PLL时钟 while(RCC_GetSYSCLKSource() != 0x08) //检查PLL时钟是否作为系统时钟 { } } } void Usart2_Remap() { GPIO_InitTypeDef GPIO_InitStructure; //打开重映射和USART重映射后的IO引脚时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_AFIO,ENABLE); //IO口重映射开启 GPIO_PinRemapConfig(GPIO_Remap_USART2,ENABLE); //配置重映射引脚,这里只需要配置重映射后的IO,原来的不需要去配置 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOD, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOD, &GPIO_InitStructure); } void GPIO_Configuration() { GPIO_InitTypeDef GPIO_InitStructure; //打开重映射和USART重映射后的IO引脚时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); } /********************************************** 函数: NVIC_Configuration() 功能: 中断控制 配置 参数: 无 返回: 无 **************************************************/ /*void NVIC_Configuration() { NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQChannel; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } */ /************************************************* 函数: USART1_Configuration(void) 功能: 串口 配置 参数: 无 返回: 无 **************************************************/ void USART2_Configuration(void) { USART_InitTypeDef USART_InitStructure; //Usart2_Remap(); /* 第1步:打开GPIO和USART部件的时钟 */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); /* 第4步:配置USART1参数 - BaudRate = 9600 baud - Word Length = 8 Bits - One Stop Bit - No parity - Hardware flow control disabled (RTS and CTS signals) - Receive and transmit enabled */ USART_InitStructure.USART_BaudRate = 9600; 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(USART2, &USART_InitStructure); /* 若接收数据寄存器满,则产生中断 */ // USART_ITConfig(USART2, USART_IT_RXNE, ENABLE); /* 第5步:使能 USART1, 配置完毕 */ USART_Cmd(USART2, ENABLE); /* 如下语句解决第1个字节无法正确发送出去的问题 */ USART_ClearFlag(USART2, USART_FLAG_TC); // 清标志 } /************************************************* 函数: delay_ms(uint16_t delay_value) 功能: 延时 参数: 无 返回: 无 **************************************************/ void delay_ms(uint16_t delay_value)//系统时钟72M情况下 { uint16_t i=0; while(delay_value--) { i=12000; //有人用18000 while(i--) ; } } |
|
相关推荐 |
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
《DNESP32S3使用指南-IDF版_V1.6》第三十五章 摄像头实验
632 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第三十章 DHT11数字温湿度传感器
671 浏览 0 评论
772 浏览 0 评论
【敏矽微ME32G070开发板免费体验】之原厂2812测试例程解析
1340 浏览 0 评论
1166 浏览 2 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12057 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-28 18:43 , Processed in 0.429994 second(s), Total 67, Slave 51 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号