完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
serial.c
#include "serial.h" int fputc(int ch,FILE *p) //在使用printf时系统自动条用此函数 { USART_SendData(USART2,(u8)ch); while(USART_GetFlagStatus(USART2,USART_FLAG_TXE)==RESET); return ch; } /******************************************************************************* * 函 数 名 : serial_init * 函数功能 : IO端口及串口1,时钟初始化函数 A9,A10 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void serial1_init(u32 bt) { GPIO_InitTypeDef GPIO_InitStructure; //声明一个结构体变量,用来初始化GPIO NVIC_InitTypeDef NVIC_InitStructure; //中断结构体定义 USART_InitTypeDef USART_InitStructure; //串口结构体定义 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1|RCC_APB2Periph_AFIO,ENABLE); GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;//TX GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; GPIO_Init(GPIOA,&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;//RX GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA,&GPIO_InitStructure); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); USART_InitStructure.USART_BaudRate=bt; //波特率设置为bt 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); USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//使能或者失能指定的USART中断 接收中断 USART_ClearFlag(USART1,USART_FLAG_TC);//清除USARTx的待处理标志位 } /******************************************************************************* * 函 数 名 : serial2_init * 函数功能 : IO端口及串口2,时钟初始化函数 A2,A3 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void serial2_init(u32 bt) { USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; //声明一个结构体变量,用来初始化GPIO //使能串口的RCC时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE); //使能UART3所在GPIOB的时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); //串口使用的GPIO口配置 // Configure USART2 Rx (PB.11) as input floating GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); // Configure USART2 Tx (PB.10) as alternate function push-pull GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); //配置串口 USART_InitStructure.USART_BaudRate = bt; 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; // Configure USART3 USART_Init(USART2, &USART_InitStructure);//配置串口3 // Enable USART1 Receive interrupts 使能串口接收中断 USART_ITConfig(USART2, USART_IT_RXNE, ENABLE); //串口发送中断在发送数据时开启 //USART_ITConfig(USART2, USART_IT_TXE, ENABLE); // Enable the USART3 USART_Cmd(USART2, ENABLE);//使能串口3 //串口中断配置 //Configure the NVIC Preemption Priority Bits NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); // Enable the USART3 Interrupt NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } /******************************************************************************* * 函 数 名 : serial3_init * 函数功能 : IO端口及串口3,时钟初始化函数 B10,B11 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void serial3_init(u32 bt) { USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; //声明一个结构体变量,用来初始化GPIO //使能串口的RCC时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE); //使能UART3所在GPIOB的时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE); //串口使用的GPIO口配置 // Configure USART2 Rx (PB.11) as input floating GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOB, &GPIO_InitStructure); // Configure USART2 Tx (PB.10) as alternate function push-pull GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOB, &GPIO_InitStructure); //配置串口 USART_InitStructure.USART_BaudRate = bt; 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; // Configure USART3 USART_Init(USART3, &USART_InitStructure);//配置串口3 // Enable USART1 Receive interrupts 使能串口接收中断 USART_ITConfig(USART3, USART_IT_RXNE, ENABLE); //串口发送中断在发送数据时开启 //USART_ITConfig(USART2, USART_IT_TXE, ENABLE); // Enable the USART3 USART_Cmd(USART3, ENABLE);//使能串口3 //串口中断配置 //Configure the NVIC Preemption Priority Bits NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); // Enable the USART3 Interrupt NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } /******************************************************************************* * 函 数 名 : serial1_sned_char * 函数功能 : 串口1发送一字节 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void serial1_sned_char(u8 temp) { USART_SendData(USART1,(u8)temp); while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET); } /******************************************************************************* * 函 数 名 : serial1_sned_buff * 函数功能 : 串口1发送一字符串 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void serial1_sned_buff(u8 buf[],u32 len) { u32 i; for(i=0;i } /******************************************************************************* * 函 数 名 : serial2_sned_char * 函数功能 : 串口2发送一字节 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void serial2_sned_char(u8 temp) { USART_SendData(USART2,(u8)temp); while(USART_GetFlagStatus(USART2,USART_FLAG_TXE)==RESET); } /******************************************************************************* * 函 数 名 : serial2_sned_buff * 函数功能 : 串口2发送一字符串 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void serial2_sned_buff(u8 buf[],u32 len) { u32 i; for(i=0;i } //-------------------------------------------------------------------------------------------------------- /******************************************************************************* * 函 数 名 : serial3_sned_char * 函数功能 : 串口3发送一字节 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void serial3_sned_char(u8 temp) { USART_SendData(USART3,(u8)temp); while(USART_GetFlagStatus(USART3,USART_FLAG_TXE)==RESET); } /******************************************************************************* * 函 数 名 : serial3_sned_buff * 函数功能 : 串口3发送一字符串 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void serial3_sned_buff(u8 buf[],u32 len) { u32 i; for(i=0;i } serial.h **************************************************/ #ifndef _serial_ #define _serial_ #include "stm32f10x.h" #include "stdio.h" //------------------------------------------------------------------------------------------ /******************************************************************************* * 函 数 名 : fputc * 函数功能 : printf会调用 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ int fputc(int ch,FILE *p); /******************************************************************************* * 函 数 名 : serial1_init * 函数功能 : IO端口及串口1,时钟初始化函数 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void serial1_init(u32 bt); /******************************************************************************* * 函 数 名 : serial1_sned_char * 函数功能 : 串口1发送一字节 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void serial1_sned_char(u8 temp); /******************************************************************************* * 函 数 名 : serial1_sned_buff * 函数功能 : 串口1发送一字符串 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void serial1_sned_buff(u8 buf[],u32 len); //----------------------------------------------------------------------------------------------------- /******************************************************************************* * 函 数 名 : serial2_init * 函数功能 : IO端口及串口2,时钟初始化函数 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void serial2_init(u32 bt); /******************************************************************************* * 函 数 名 : serial2_sned_char * 函数功能 : 串口2发送一字节 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void serial2_sned_char(u8 temp); /******************************************************************************* * 函 数 名 : serial2_sned_buff * 函数功能 : 串口2发送一字符串 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void serial2_sned_buff(u8 buf[],u32 len); //-------------------------------------------------------------------------------------------------------- /******************************************************************************* * 函 数 名 : serial3_init * 函数功能 : IO端口及串口3,时钟初始化函数 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void serial3_init(u32 bt); /******************************************************************************* * 函 数 名 : serial3_sned_char * 函数功能 : 串口3发送一字节 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void serial3_sned_char(u8 temp); /******************************************************************************* * 函 数 名 : serial3_sned_buff * 函数功能 : 串口3发送一字符串 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void serial3_sned_buff(u8 buf[],u32 len); 串口中断函数处理部分 void USART1_IRQHandler(void) { USART_ClearFlag(USART1,USART_FLAG_TC); if(USART_GetITStatus(USART1,USART_IT_RXNE)!=Bit_RESET)//检查指定的USART中断发生与否 { u8 k=USART_ReceiveData(USART1); serial1_sned_char(k+1); } } void USART2_IRQHandler(void) { USART_ClearFlag(USART2,USART_FLAG_TC); if(USART_GetITStatus(USART2,USART_IT_RXNE)!=Bit_RESET)//检查指定的USART中断发生与否 { u8 k=USART_ReceiveData(USART2); serial1_sned_char(k+1); } } void USART3_IRQHandler(void) { USART_ClearFlag(USART3,USART_FLAG_TC); if(USART_GetITStatus(USART3,USART_IT_RXNE)!=Bit_RESET)//检查指定的USART中断发生与否 { u8 k=USART_ReceiveData(USART3); serial1_sned_char(k+1); } } |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1820 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1634 浏览 1 评论
1104 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
740 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1692 浏览 2 评论
1951浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
756浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
587浏览 3评论
605浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
570浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-31 02:22 , Processed in 0.636046 second(s), Total 47, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号