头像-125072

hehung

  • 23385
  • 单片机、嵌入式、传感器/MEMS
  • 汽车电子

个人成就

获得 334 次赞

帮助过788人

怎样使用普通的IO口模拟串口

普通的IO口如何模拟串口通信

lpc54114的串口

使用LPC54114的官方SDK只有串口0的例程,我想使用串口1,配置了但是没有成功,请问有没有例程或者配置方式

这是什么情况

突然间就不能出现了这个问题,重新打开,重启系统之后都存在这个问题

请问这三个工程的不同之处

下载了NXP的官方的SDK,发现驱动都有三个工程,比如下图的IIC驱动,这三个工程有什么不同。

用max038作信号发生器的问题

产生的波形是真比较大,而且毛刺太多,波形不稳定,请问有没有解决方法或者造成这种现象的原因是什么。还有就是三角和正弦波的区别很小

请问这是什么问题?

keil突然间就出现了问题,显示如下,编译不了stm32的工程,但是我已经安装了cortex-m的工具包了,重新卸载了在安装也不行呀

stm32的各种定时器之间的区别

基本定时器,高级定时器,通用定时器之间的区别

配置两个串口的问题

同时使用两个串口可以正常的发送,但是不能接收,单独使用的时候既可以发送又可以接收,并且单独使用的时候发送的时候可以使用printf进行发送,一起使用的使用就不能用printf了,为什么?下面是对两个串口的配置,最开始串口接收中断是没有屏蔽的,最后接受不了才屏蔽的。/**  ******************************************************************************  * @file    bsp_usart.c  * @author  fire  * @version V1.0  * @date    2013-xx-xx  * @brief   重定向c库printf函数到usart端口  ******************************************************************************  * @attention  *  * 实验平台:秉火STM32 F103-霸道 开发板    * 论坛    :http://www.firebbs.cn  * 淘宝    :https://fire-stm32.taobao.com  *  ******************************************************************************  */  #include "bsp_usart.h"void USART1_Config(void){ GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; // 打开串口GPIO的时钟 DEBUG_USART1_GPIO_APBxClkCmd(DEBUG_USART1_GPIO_CLK ENABLE); // 打开串口外设的时钟 DEBUG_USART1_APBxClkCmd(DEBUG_USART1_CLK ENABLE); // 将USART Tx的GPIO配置为推挽复用模式 GPIO_InitStructure.GPIO_Pin = DEBUG_USART1_TX_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(DEBUG_USART1_TX_GPIO_PORT &GPIO_InitStructure);  // 将USART Rx的GPIO配置为浮空输入模式 GPIO_InitStructure.GPIO_Pin = DEBUG_USART1_RX_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(DEBUG_USART1_RX_GPIO_PORT &GPIO_InitStructure); // 配置串口的工作参数 // 配置波特率 USART_InitStructure.USART_BaudRate = DEBUG_USART1_BAUDRATE; // 配置 针数据字长 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(DEBUG_USART1 &USART_InitStructure); // 串口中断优先级配置 /* 嵌套向量中断控制器组选择 */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); /* 配置USART为中断源 */ NVIC_InitStructure.NVIC_IRQChannel = DEBUG_USART1_IRQ; /* 抢断优先级*/ NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; /* 子优先级 */ NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; /* 使能中断 */ NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; /* 初始化配置NVIC */ NVIC_Init(&NVIC_InitStructure); // 使能串口接收中断 USART_ITConfig(DEBUG_USART1 USART_IT_RXNE ENABLE); // 使能串口 USART_Cmd(DEBUG_USART1 ENABLE);    }//void USART1_IRQHandler(void) //中断处理函数;//{// uint8_t ucTemp;// if(USART_GetITStatus(DEBUG_USART1USART_IT_RXNE)!=RESET)// { // ucTemp = USART_ReceiveData(DEBUG_USART1);// USART_SendData(DEBUG_USART1ucTemp);    // } //} void USART2_Config(void){ GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure;         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA ENABLE ); RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2 ENABLE ); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //USART2 TX; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA &GPIO_InitStructure); //端口A; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; //USART2 RX; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入; GPIO_Init(GPIOA &GPIO_InitStructure); //端口A; USART_InitStructure.USART_BaudRate = 9600; //波特率; USART_InitStructure.USART_WordLength = USART_WordLength_8b; //数据位8位; USART_InitStructure.USART_StopBits = USART_StopBits_1; //停止位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);//配置串口参数; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置中断组,4位抢占优先级,4位响应优先级; NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn; //中断号; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢占优先级; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //响应优先级; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); USART_ITConfig(USART2 USART_IT_RXNE ENABLE); USART_Cmd(USART2 ENABLE); //使能串口;}//void USART2_IRQHandler(void) //中断处理函数;//{//// u8 res;    //// if(USART_GetITStatus(USART2 USART_IT_RXNE) == SET) //判断是否发生中断;//// {//// USART_ClearFlag(USART2 USART_IT_RXNE); //清除标志位;//// res=USART_ReceiveData(USART2); //接收数据;//// USART2_SendByte(res); //用户自定义;//// }  // // uint8_t ucTemp;// if(USART_GetITStatus(DEBUG_USART2USART_IT_RXNE)!=RESET)// { // ucTemp = USART_ReceiveData(DEBUG_USART2);// USART_SendData(DEBUG_USART2ucTemp);    // } //} /*****************  发送一个字符 **********************/void Usart_SendByte( USART_TypeDef * pUSARTx uint8_t ch){ /* 发送一个字节数据到USART */ USART_SendData(pUSARTxch); /* 等待发送数据寄存器为空 */ while (USART_GetFlagStatus(pUSARTx USART_FLAG_TXE) == RESET); }/*****************  发送字符串 **********************/void Usart_SendString( USART_TypeDef * pUSARTx char *str){ unsigned int k=0;  do   {      Usart_SendByte( pUSARTx *(str + k) );      k++;  } while(*(str + k)!='\0');    /* 等待发送完成 */  while(USART_GetFlagStatus(pUSARTxUSART_FLAG_TC)==RESET)  {}}/*****************  发送一个16位数 **********************/void Usart_SendHalfWord( USART_TypeDef * pUSARTx uint16_t ch){ uint8_t temp_h temp_l; /* 取出高八位 */ temp_h = (ch&0XFF00)>>8; /* 取出低八位 */ temp_l = ch&0XFF; /* 发送高八位 */ USART_SendData(pUSARTxtemp_h); while (USART_GetFlagStatus(pUSARTx USART_FLAG_TXE) == RESET); /* 发送低八位 */ USART_SendData(pUSARTxtemp_l); while (USART_GetFlagStatus(pUSARTx USART_FLAG_TXE) == RESET); }​