完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
接收端串口设置
我们定义的是串口函数初始化,我们使用的是串口二 void uart2_init(u32 bound) { //GPIO端口设置 GPIO_InitTypeDef UartGpioInitStructer; USART_InitTypeDef UartinitStructer; //在配置过程中,为防止TX RX不再同一个端口上,增强可移植性,固分开配置 //初始化串口TX RX 引脚 RCC_APB2PeriphClockCmd( UART2_TX_GPIO_CLK | UART2_RX_GPIO_CLK, ENABLE ); //打开TX RX 端口时钟 UartGpioInitStructer.GPIO_Mode = GPIO_Mode_AF_PP; UartGpioInitStructer.GPIO_Speed = GPIO_Speed_2MHz; //TX UartGpioInitStructer.GPIO_Pin = UART2_TX_GPIO_PIN; GPIO_Init( UART2_TX_GPIO_PORT, &UartGpioInitStructer ); //初始化TX引脚 配置为复用功能 //RX UartGpioInitStructer.GPIO_Mode = GPIO_Mode_IN_FLOATING; UartGpioInitStructer.GPIO_Pin = UART2_RX_GPIO_PIN; GPIO_Init( UART2_RX_GPIO_PORT, &UartGpioInitStructer ); //初始化RX引脚 配置为输入 //配置USART外设 USART_DeInit( UART2_PORT ); //外设复位 if( USART1 == UART2_PORT ) //使能外设时钟 { RCC_APB2PeriphClockCmd( UART2_PORT_CLK, ENABLE ); } //不同的USART外设可能在不同的APB时钟上 else //STM32F103单片机只有USART1在APB2上,如平台有差异做相应改变即可 { RCC_APB1PeriphClockCmd( UART2_PORT_CLK, ENABLE ); } UartinitStructer.USART_BaudRate = bound; //设置波特率 UartinitStructer.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //不使用流控制 UartinitStructer.USART_Mode = USART_Mode_Tx | USART_Mode_Rx; //发送和接收 UartinitStructer.USART_Parity = USART_Parity_No; //不带校验 UartinitStructer.USART_StopBits = USART_StopBits_1; //一个停止位 UartinitStructer.USART_WordLength = USART_WordLength_8b; //8个数据位 USART_Cmd( UART2_PORT, DISABLE ); //失能外设 USART_Init( UART2_PORT, &UartinitStructer ); //初始化外设 USART_Cmd( UART2_PORT, ENABLE ); //使能外设 } 串口接收函数设置 uint8_t drv_uart2_rx_bytes( uint8_t* RxBuffer ) { uint8_t l_RxLength = 0; uint16_t l_UartRxTimOut = 0x7FFF; while( l_UartRxTimOut-- ) //等待查询串口数据 { if( RESET != USART_GetFlagStatus( UART2_PORT, USART_FLAG_RXNE )) { *RxBuffer = (uint8_t)UART2_PORT->DR; RxBuffer++; l_RxLength++; l_UartRxTimOut = 0x7FFF; //接收到一个字符,回复等待时间 } if( 100 == l_RxLength ) { break; //不能超过100个字节 } } return l_RxLength; //等待超时,数据接收完成 } 定时中断初始化,进行循环接收 #ifndef __USART_H #define __USART_H #include "stdio.h" #include "sys.h" void uart2_init(u32 bound); #define UART2_TX_GPIO_PORT GPIOA #define UART2_TX_GPIO_CLK RCC_APB2Periph_GPIOA #define UART2_TX_GPIO_PIN GPIO_Pin_2 #define UART2_RX_GPIO_PORT GPIOA #define UART2_RX_GPIO_CLK RCC_APB2Periph_GPIOA #define UART2_RX_GPIO_PIN GPIO_Pin_3 uint8_t drv_uart2_rx_bytes( uint8_t* RxBuffer ); #endif 定制中断函数编写 void TIM2_Int_Init(u16 arr,u16 psc) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //时钟使能 TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值 计数到5000为500ms TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值 10Khz的计数频率 TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式 TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位 TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE); TIM_ClearITPendingBit(TIM2,TIM_IT_Update); NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; //TIM3中断 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //先占优先级 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //从优先级 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能 NVIC_Init(&NVIC_InitStructure); //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器 TIM_Cmd(TIM2, ENABLE); //使能TIMx外设 } 主函数里面串口初始化,然后配置定时器二,设置成10ms中断。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1792 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1626 浏览 1 评论
1094 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
732 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1682 浏览 2 评论
1943浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
744浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
578浏览 3评论
601浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
563浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 19:51 , Processed in 0.969984 second(s), Total 79, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号