OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2412|回复: 3

分享----串口1.2通信(无线)

[复制链接]

13

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
179
金钱
179
注册时间
2016-10-2
在线时间
29 小时
发表于 2016-10-31 14:52:34 | 显示全部楼层 |阅读模式
最近在搞一个航模的项目,下位机需要用串口1接收无线信息,再把接收到的信息用串口2发出去(串口2接的舵机);通过这些天学习各位大神的资料,目前已经实现了部分目标。先说程序,我将原子哥的蓝牙程序中用不到的全部删除,再将USART2和MAIN分别改为如下:
[size=15.4545450210571px]USART2
--------------------------------------------------------------------------------------------------------------------
#include "usart2.h"          
//////////////////////////////////////////////////////////////////////////////////          
//èç1ûê1óÃucos,Ôò°üà¨ÏÂÃæμÄí·Îļt¼′¿é.
#if SYSTEM_SUPPORT_UCOS
#include "includes.h"                                        //ucos ê1óà         
#endif
#if EN_USART2_RX   //èç1ûê1Äüá˽óêÕ
//′®¿ú1ÖD¶Ï·tÎñ3ìDò
//×¢òa,¶áè¡USARTx->SRÄü±üÃaÄaÃûÆäÃîμÄ′íÎó          
u8 USART2_RX_BUF[USART2_REC_LEN];     //½óêÕ»o3å,×î′óUSART_REC_LEN¸ö×Ö½ú.
//½óêÕ×′ì¬
//bit15£¬        ½óêÕíê3é±êÖ¾
//bit14£¬        ½óêÕμ½0x0d
//bit13~0£¬        ½óêÕμ½μÄóDD§×Ö½úêyÄ¿
u16 USART2_RX_STA=0;       //½óêÕ×′쬱ê¼Ç          

void USART2_IRQHandler(void)
{
        u8 res;       
#ifdef OS_CRITICAL_METHOD         //èç1ûOS_CRITICAL_METHOD¶¨òåáË,ËμÃ÷ê1óÃucosIIáË.
        OSIntEnter();   
#endif
        if(USART2->SR&(1<<5))//&#189;óê&#213;μ&#189;êy&#190;Y
        {         
                res=USART2->DR;
                if((USART2_RX_STA&0x8000)==0)//&#189;óê&#213;&#206;′íê3é
                {
                        if(USART2_RX_STA&0x4000)//&#189;óê&#213;μ&#189;á&#203;0x0d
                        {
                                if(res!=0x0a)USART2_RX_STA=0;//&#189;óê&#213;′í&#206;ó,&#214;&#216;D&#194;&#191;aê&#188;
                                else USART2_RX_STA|=0x8000;        //&#189;óê&#213;íê3éá&#203;
                        }else //&#187;1&#195;&#187;ê&#213;μ&#189;0X0D
                        {       
                                if(res==0x0d)USART2_RX_STA|=0x4000;
                                else
                                {
                                        USART2_RX_BUF[USART2_RX_STA&0X3FFF]=res;
                                        USART2_RX_STA++;
                                        if(USART2_RX_STA>(USART2_REC_LEN-1))USART2_RX_STA=0;//&#189;óê&#213;êy&#190;Y′í&#206;ó,&#214;&#216;D&#194;&#191;aê&#188;&#189;óê&#213;          
                                }                 
                        }
                }                                                                                                
        }
#ifdef OS_CRITICAL_METHOD         //è&#231;1&#251;OS_CRITICAL_METHOD&#182;¨ò&#229;á&#203;,&#203;μ&#195;÷ê1ó&#195;ucosIIá&#203;.
        OSIntExit();                                                                                           
#endif
}
#endif                                                                                 
//3&#245;ê&#188;&#187;ˉIO ′&#174;&#191;ú1
//pclk2CLK2ê±&#214;ó&#198;μ&#194;ê(Mhz)
//bound:2¨ì&#216;&#194;ê
//CHECK OK
//091209
void USART2_Init(u32 pclk1,u32 bound)
{           
        float temp;
        u16 mantissa;
        u16 fraction;          
        temp=(float)(pclk1*1000000)/(bound*16);//μ&#195;μ&#189;USARTDIV
        mantissa=temp;                                 //μ&#195;μ&#189;&#213;&#251;êy2&#191;·&#214;
        fraction=(temp-mantissa)*16; //μ&#195;μ&#189;D&#161;êy2&#191;·&#214;         
    mantissa<<=4;
        mantissa+=fraction;
        RCC->APB2ENR|=1<<2;   //ê1&#196;üPORTA&#191;úê±&#214;ó  
        RCC->APB1ENR|=1<<17;  //ê1&#196;ü′&#174;&#191;úê±&#214;ó
        GPIOA->CRL&=0XFFFF00FF;//IO×′ì&#172;éè&#214;&#195;
        GPIOA->CRL|=0X00008B00;//IO×′ì&#172;éè&#214;&#195;
                  
        RCC->APB1RSTR|=1<<17;   //&#184;′&#206;&#187;′&#174;&#191;ú1
        RCC->APB1RSTR&=~(1<<17);//í£&#214;1&#184;′&#206;&#187;                     
        //2¨ì&#216;&#194;êéè&#214;&#195;
        USART2->BRR=mantissa; // 2¨ì&#216;&#194;êéè&#214;&#195;         
        USART2->CR1|=0X200C;  //1&#206;&#187;í£&#214;1,&#206;TD£&#209;é&#206;&#187;.
#if EN_USART2_RX                  //è&#231;1&#251;ê1&#196;üá&#203;&#189;óê&#213;
        //ê1&#196;ü&#189;óê&#213;&#214;D&#182;&#207;
        USART2->CR1|=1<<8;    //PE&#214;D&#182;&#207;ê1&#196;ü
        USART2->CR1|=1<<5;    //&#189;óê&#213;&#187;o3&#229;&#199;&#248;·&#199;&#191;&#213;&#214;D&#182;&#207;ê1&#196;ü                   
        MY_NVIC_Init(2,3,USART2_IRQn,2);//×é2£&#172;×&#238;μíó&#197;&#207;è&#188;&#182;
#endif
}

----------------------------------------------------------------------------------------------------------------------
MAIN
----------------------------------------------------------------------------------------------------------------------
#include "sys.h"
#include "usart.h"
#include "usart2.h"
#include "delay.h"       
#include "led.h"
#include "beep.h"                  
#include "key.h"                  

int main(void)
{                       
        u16 t;
        u16 len;       
        u16 times=0;                                           
        Stm32_Clock_Init(9);        //&#207;μí3ê±&#214;óéè&#214;&#195;
        delay_init(72);                            //&#209;óê±3&#245;ê&#188;&#187;ˉ
        uart_init(72,115200);                 //′&#174;&#191;ú3&#245;ê&#188;&#187;ˉ&#206;a9600
        USART2_Init(36,115200);         //′&#174;&#191;ú13&#245;ê&#188;&#187;ˉ&#206;a9600
        LED_Init();                                  //3&#245;ê&#188;&#187;ˉó&#235;LEDá&#172;&#189;óμ&#196;ó2&#188;t&#189;ó&#191;ú
        BEEP_Init();                 //3&#245;ê&#188;&#187;ˉ·&#228;&#195;ù&#198;÷&#182;&#203;&#191;ú
        KEY_Init();                 //3&#245;ê&#188;&#187;ˉó&#235;°′&#188;üá&#172;&#189;óμ&#196;ó2&#188;t&#189;ó&#191;ú
        while(1)
        {
               
                if(USART_RX_STA&0x8000)//è&#231;1&#251;′&#174;1&#189;óê&#213;μ&#189;êy&#190;Y£&#187;
                {                                          
                        len=USART_RX_STA&0x3FFF;//μ&#195;μ&#189;′&#203;′&#206;&#189;óê&#213;μ&#189;μ&#196;êy&#190;Y3¤&#182;è£&#187;
                        for(t=0;t<len;t++)
                        {
                                USART2->DR=USART_RX_BUF[t];//&#189;&#171;′&#174;&#191;ú1&#189;óê&#213;&#187;o′&#230;í¨1y′&#174;&#191;ú2·¢&#203;í3&#246;è¥
                                while((USART2->SR&0X40)==0);//μè′y·¢&#203;í&#189;áê&#248;
                        }
                        USART_RX_STA=0;//&#189;óê&#213;×′ì&#172;±ê&#188;&#199;          
            len=0;
                        delay_ms(10);   
                }
//                 else(USART2_RX_STA&0x8000);//è&#231;1&#251;′&#174;2&#189;óê&#213;μ&#189;êy&#190;Y£&#187;
                if(USART2_RX_STA&0x8000)//è&#231;1&#251;′&#174;2&#189;óê&#213;μ&#189;êy&#190;Y£&#187;
                {                                          
                        len=USART2_RX_STA&0x3FFF;//μ&#195;μ&#189;′&#203;′&#206;&#189;óê&#213;μ&#189;μ&#196;êy&#190;Y3¤&#182;è£&#187;
                        for(t=0;t<len;t++)
                        {
                                USART1->DR=USART2_RX_BUF[t];//&#189;&#171;′&#174;&#191;ú2&#189;óê&#213;&#187;o′&#230;í¨1y′&#174;&#191;ú1·¢&#203;í3&#246;è¥
                                while((USART1->SR&0X40)==0);//μè′y·¢&#203;í&#189;áê&#248;
                        }
                        USART2_RX_STA=0;//&#189;óê&#213;×′ì&#172;±ê&#188;&#199;          
             len=0;
                        delay_ms(10);   
        }         
        else
                {        times++;
                        if(times%30==0)LED0=!LED0;//éá&#203;&#184;LED,ìáê&#190;&#207;μí3&#213;y&#212;ú&#212;&#203;DD.
                        delay_ms(10);   
                }
}

}

再说说我的链接方式,串口1和电脑链接(就是平时下载程序的连接方式);串口2与无线模块1链接;无线模块2通过USB转串口插在另一台电脑U口;
打开两台电脑上的串口助手,设置好波特率等就可以通信了(波特率设置串口和无线模块的都要一致)





C8%}RY362F2$9PG$BMH{P(9.png
}_Z(2T]OHV1SA5~(ND4J1IY.png
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

90

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
282
金钱
282
注册时间
2016-8-5
在线时间
158 小时
发表于 2016-10-31 21:08:48 | 显示全部楼层
本帖最后由 他说他不在 于 2016-10-31 21:10 编辑

能传视频不?
回复 支持 反对

使用道具 举报

13

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
179
金钱
179
注册时间
2016-10-2
在线时间
29 小时
 楼主| 发表于 2016-11-1 08:03:39 | 显示全部楼层

不能
回复 支持 反对

使用道具 举报

5

主题

90

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
282
金钱
282
注册时间
2016-8-5
在线时间
158 小时
发表于 2016-11-1 20:11:17 | 显示全部楼层

还是2.4G快。。哈哈
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-24 21:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表