stm32 由串口1接收数据串口2发送数据(没有电气连接)怎样配置的 (用直接操作寄存器的方式)。
作者&投稿:仲孙发 (若有异议请与网页底部的电邮联系)
最简单就建个数组当缓冲区,串口2中断接收,串口1判断缓冲区只要有数据就发送,发送时计数器或指针移位的过程最好屏蔽中断。
最简单就建个数组当缓冲区,串口2中断接收,串口1判断缓冲区只要有数据就发送,发送时计数器或指针移位的过程最好屏蔽中断。
//pclk2:PCLK2时钟频率(Mhz)//bound:波特率
//CHECK OK
//091209
void uart_init(u32 pclk2,u32 bound)
{
float temp;
u16 mantissa;
u16 fraction;
temp=(float)(pclk2*1000000)/(bound*16);//得到USARTDIV
mantissa=temp; //得到整数部分
fraction=(temp-mantissa)*16; //得到小数部分
mantissa<<=4;
mantissa+=fraction;
RCC->APB2ENR|=1<<2; //使能PORTA口时钟
RCC->APB2ENR|=1<<14; //使能串口时钟
GPIOA->CRH&=0XFFFFF00F;
GPIOA->CRH|=0X000008B0;//IO状态设置
RCC->APB2RSTR|=1<<14; //复位串口1
RCC->APB2RSTR&=~(1<<14);//停止复位
//波特率设置
USART1->BRR=mantissa; // 波特率设置
USART1->CR1|=0X200C; //1位停止,无校验位.
//#ifdef EN_USART1_RX //如果使能了接收
//使能接收中断
USART1->CR1|=0<<8; //PE中断使能
USART1->CR1|=1<<5; //接收缓冲区非空中断使能
MY_NVIC_Init(3,3,USART1_IRQChannel,2);//组2,最低优先级
//#endif
}
琦德补脾: 最简单就建个数组当缓冲区,串口2中断接收,串口1判断缓冲区只要有数据就发送,发送时计数器或指针移位的过程最好屏蔽中断.
千阳县13364503914: stm32 由串口1接收数据串口2发送数据(没有电气连接)怎样配置的 (用直接操作寄存器的方式). - ?
琦德补脾: //pclk2:PCLK2时钟频率(Mhz) //bound:波特率 //CHECK OK //091209 void uart_init(u32 pclk2,u32 bound) {float temp;u16 mantissa;u16 fraction;temp=(float)(pclk2*1000000)/(bound*16);//得到USARTDIVmantissa=temp; //得到整数部分 ...
千阳县13364503914: 我用stm32的串口1接收电脑发的数据,用串口2发送给SIM900A,再将SIM900的返回值通过 - ?
琦德补脾: 这个有几种可能的,其中有一点一定是肯定的,就是你的接受中断有没有打开?如何你前面发送才用中断发送的话,必须先关闭,再打开接受中断,两个中断必须互锁,二问题一天出在收发时序上程序设计不正确,好好检查.当然还有其他的办法来验证sim900是不是真的发出数据了!
千阳县13364503914: stm32串口通信 - ?
琦德补脾: 配置串口1时钟,串口2时钟,配置串口1,2使用的IO口状态 开启接收中断 调用库函数中发送函数发送数据 在中断中接收数据
千阳县13364503914: 我用STM32芯片,要串口接收数据并通过此数据来控制IO口,不知从何入手?这程序该怎么写? - ?
琦德补脾: 其实很简单的,通过库文件配置对应的usart收发io口,以及一些基本配置,当然中间也有中断触发设置,再去文件stm32f2xxit.c文件里面,添加一个usart的中断服务函数,再调一下串口调试助手就好了
千阳县13364503914: stm32开两个串口,用空闲中断接收数据,往串口2发数据,串口1中断1里收到数据???? - ?
琦德补脾: 忘记说了,两个串口都是用到 DMA接收数据的,用串口空闲中断接收数据
千阳县13364503914: stm32串口1和串口2配置有什么区别 - ?
琦德补脾: 调用的库函数的名称不一样,初始化配置时写的寄存器名称不一样.无非就是把usart1改为usart2.很简单的
千阳县13364503914: STM32F103能同时开启串口1和串口2吗 - ?
琦德补脾: 应该是没有影响的,因为stm32的各个串口是独立工作的!不知道你的串口收发用的是什么机制,如果是中断的话应该没有问题,如果是查询的话可能会导致串口3正在收发数据无法执行其他程序,进而串口1接不到东西
千阳县13364503914: STM32程序 - ?
琦德补脾: 整句的意思就是把串口1接收到的数据写到串口的缓冲区中.Write_UART_Buff()这个函数我在串口库里面没找到,应该是自己写的,猜想是一个写字节函数.USART_ReceiveData()这个函数在库文件在stm32xxx_usart.c中.uint...
千阳县13364503914: stm32程序串口问题 - ?
琦德补脾: 串口2的USART_FLAG_RXNE标志位没有被清掉,while的条件一直被满足. 顺序不对, while(USART_GetFlagStatus(USART2,USART_FLAG_RXNE)==RESET) {Buffer=USART_ReceiveData(USART2); //接受数串口2的数据 } 才能清掉收到数据的标志位