精华内容
下载资源
问答
  • /******************************************************************************* ****************... } } IMG_1445.JPG (1.54 MB, 下载次数: 3) 2017-6-1 22:23 上传 2017-6-1 22:23 上传 串口2收 串口1ttl连电脑

    /*******************************************************************************

    *******************************************************************************/

    #include "stm32f10x_lib.h"

    void RCC_Configuration(void);

    void GPIO_Configuration(void);

    void USART1_Configuration(void);

    void USART2_Configuration(void);

    void NVIC_Configuration(void);

    void USART1_3G();

    u16 i;//短延时用

    /*******************************************************************************

    * 函数名   : main

    * 函数描述     : 主函数

    *******************************************************************************/

    int main(void)

    {

    RCC_Configuration();//配置RCC时钟

    GPIO_Configuration(); //配置GPIO端口

    NVIC_Configuration();//配置nvic中断向量管理

    USART1_Configuration(); //配置USART1

    USART2_Configuration(); //配置USART2

    USART1_3G();//使用串口1首先完成3g模块初始化

    while(1)

    {

    }

    }

    void delay(int t)

    {

    int i,j;

    for(i=0;i<3000;++i)

    for(j=0;j<30000;++j) ;

    }

    /***********************************************

    @入参:串口号,单个字节

    @函数说明:发送单个字节数据

    ***********************************************/

    void USART_SEND(USART_TypeDef* USARTx,u8 Data)

    {

    USART1->SR;

    USART_SendData(USARTx,Data);

    while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)==RESET){}

    }

    /***********************************************

    @函数入参:串口号,字符串数组

    @函数说明:发送数组

    ***********************************************/

    void USART_SENDS(USART_TypeDef* USARTx,u8 send_data[])

    {

    while(*send_data!='\0')

    {

    USART_SEND(USARTx,*send_data);

    send_data++;

    }

    }

    /*

    @参数:无参

    @函数说明:串口1对3g模块发送at指令进行初始化

    */

    void USART1_3G()

    {

    delay(150);

    USART_SENDS(USART1,"at^ipinit=\"3gnet\"\r\n");

    delay(200);

    USART_SENDS(USART1,"at^ipopen=1,\"TCP\",\"103.44.145.245\",17922,45678\r\n");

    delay(150);

    USART_SENDS(USART1,"AT^IPENTRANS=1\r\n");

    delay(50);

    }

    /*******************************************************************************

    * 函数名  : RCC_Configuration

    * 函数描述   : 设置系统各部分时钟

    *******************************************************************************/

    void RCC_Configuration(void)

    {

    ErrorStatus HSEStartUpStatus;//定义枚举类型变量 HSEStartUpStatus

    RCC_DeInit(); //复位系统时钟设置

    RCC_HSEConfig(RCC_HSE_ON); //开启HSE

    HSEStartUpStatus = RCC_WaitForHSEStartUp(); //等待HSE起振并稳定

    if(HSEStartUpStatus == SUCCESS)//判断HSE起是否振成功

    {

    RCC_HCLKConfig(RCC_SYSCLK_Div1);// 选择HCLK(AHB)时钟源为SYSCLK 1分频

    RCC_PCLK2Config(RCC_HCLK_Div1);//选择PCLK2时钟源为 HCLK(AHB) 1分频

    RCC_PCLK1Config(RCC_HCLK_Div2);//选择PCLK1时钟源为 HCLK(AHB) 2分频

    FLASH_SetLatency(FLASH_Latency_2);//设置FLASH延时周期数为2

    FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);//使能FLASH预取缓存

    RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); //选择锁相环(PLL)时钟源为HSE 1分频,倍频数为9 ,PLL输出频率为 8MHz * 9 = 72MHz

    RCC_PLLCmd(ENABLE); //使能PLL

    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);//等待PLL输出稳定

    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//选择SYSCLK时钟源为PLL

    while(RCC_GetSYSCLKSource() != 0x08);//等待PLL成为SYSCLK时钟源

    }

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1| RCC_APB2Periph_GPIOA, ENABLE);  //开启USART1和GPIOA时钟

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);  //开启USART2

    }

    /*******************************************************************************

    * 函数名    : NVIC_Configuration

    * 函数描述   : 设置NVIC

    *******************************************************************************/

    void NVIC_Configuration(void)

    {

    NVIC_InitTypeDef NVIC_InitStructure;

    #ifdef  VECT_TAB_RAM

    NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);/* Set the Vector Table base location at 0x20000000 */

    #else  /* VECT_TAB_FLASH  */    /* Set the Vector Table base location at 0x08000000 */

    NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);

    #endif

    NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQChannel ;  //通道设置为串口2中断

    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;   //中断占先等级0

    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;          //中断响应优先级0,赋予高的优先级

    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;             //打开中断

    NVIC_Init(&NVIC_InitStructure);

    }

    /*******************************************************************************

    * 函数名    : GPIO_Configuration

    * 函数描述     : 设置各GPIO端口功能

    *******************************************************************************/

    void GPIO_Configuration(void)

    {

    GPIO_InitTypeDef GPIO_InitStructure;//定义 GPIO 初始化结构体 GPIO_InitStructure

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;//设置USART1的Tx脚(PA.9)为第二功能推挽输出模式

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

    GPIO_Init(GPIOA , &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//设置USART1的Rx脚(PA.10)为上拉输入脚

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;

    GPIO_Init(GPIOA , &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;//设置USART2的Tx脚(PA.2)为第二功能推挽输出模式

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

    GPIO_Init(GPIOA , &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;//设置USART2的Rx脚(PA.3)为浮空输入脚

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

    GPIO_Init(GPIOA , &GPIO_InitStructure);

    }

    /*******************************************************************************

    * 函数名    : USART1_Configuration

    * 函数描述     : 设置USART1

    *******************************************************************************/

    void USART1_Configuration(void)

    {

    USART_InitTypeDef USART_InitStructure; //定义USART初始化结构体 USART_InitStructure

    USART_InitStructure.USART_BaudRate = 115200;//波特率为9600bps

    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(USART1 , &USART_InitStructure);

    USART_Cmd(USART1 , ENABLE); //使能USART1

    USART_ClearFlag(USART1,USART_FLAG_TC);//发送完成标志位

    }

    /*******************************************************************************

    * 函数名    : USART2_Configuration

    * 函数描述     : 设置USART2

    *******************************************************************************/

    void USART2_Configuration(void)

    {

    USART_InitTypeDef USART_InitStructure; //定义USART初始化结构体 USART_InitStructure

    USART_InitStructure.USART_BaudRate = 115200;//波特率为9600bps

    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);//用初始化后的结构体来初始化串口2,调用函数

    USART_Cmd(USART2 , ENABLE); //使能USART2

    USART_ITConfig(USART2,USART_IT_RXNE,ENABLE); //一定要开启串口接收中断

    USART_ClearFlag(USART2,USART_FLAG_TC);//发送完成标志位

    }

    /*******************************************************************************

    * 函数名    : USART2_IRQHandler

    * 函数描述     : 串口2的中断函数入口

    * 函数说明  :该中断函数在stm32f10x_it.c,为方便理解而剪切到main.c

    *******************************************************************************/

    void USART2_IRQHandler(void)

    {

    if(USART_GetFlagStatus(USART2 , USART_IT_RXNE) == SET)

    {

    USART_ClearITPendingBit(USART2,USART_IT_RXNE);

    USART_SendData(USART1 , USART_ReceiveData(USART2));

    for(i = 0; i < 500; i ++);

    }

    }

    IMG_1445.JPG

    (1.54 MB, 下载次数: 3)

    2017-6-1 22:23 上传

    2017-6-1 22:23 上传

    串口2收 串口1ttl连电脑

    展开全文
  • 看的视频是野火的野火F407开发板-霸天虎视频-【中级篇】,使用的固件库也是野火的(问题就出在这),在做串口实验的时候,上位机接收到的数据显示总是乱码,但是使用正点原子的串口例程通信就是正常的。 void USART...

    问题描述:

    我使用的开发板是正点原子的stm32f407探索者开发板 ,看的视频是野火的野火F407开发板-霸天虎视频-【中级篇】使用的固件库是从野火资料下载中心下载的(问题就出在这,在做串口实验的时候,上位机接收到的数据显示总是乱码,具体如下图所示

    发送的数据是:"\r\n您发送的消息为:\r\n"
    不正常的实验现象

    发送的信息是:"\r\n您发送的消息为:\r\n"

    解决方法:

    • 1、排除硬件问题。使用正点原子的串口例程,通信结果是正常的,因此问题一定出在软件上。

    • 2、当前项目搜索“#define PLL_M ”——在system_stm32f4xx.c文件中,确保PLL_M的值与板子上的晶振保持一致。如晶振是25MHz,PLL_M=25;晶振是8MHz,PLL_M=8。同文件中其他几个需要注意的参数宏定义是:

    #define PLLM 8   //VCO输入=HSE/PLL_M=8M/8=1M,1M≤VCO输入≤2M
    #define PLLN 336  //VCO倍频输出=1M*PLL_N=1M*336=336M,50≤PLLN≤432,100≤VCO倍频输出≤432.
    #define PLLP 2   //PLLCLK=336M/PLL_P=336M/2=168M=SYSCLK,PLLP={2,4,6,8},SYSCLK≤168M
    #define PLLQ 7   //PLL48CK=336M/PLL_Q=36M/7=48M,4≤PLL_Q≤15,PLL48CK≤48
    Ctrl+F
    • 3、当前项目搜索“#define HSE_VALUE”——在stm32f4xx.h文件中,确保HSE_VALUE的值与板子上的晶振保持一致。如晶振是25MHz,HSE_VALUE=25000000;晶振是8MHz,HSE_VALUE=8000000。

    正常的实验现象

    原因分析:

    • 1、PLL_M 对系统的影响。在系统进入到main函数之前,会先进行时钟配置,具体的过程在启动文件startup_stm32f40_41xxx.s中调用SystemInit函数来完成,而SystemInit函数中又调用了SetSysClock函数来最终完成配置。在SetSysClock函数中

    RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) |
                       (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24);

    更具体的可以看野火F407开发板-霸天虎视频-【中级篇】16——RCC时钟树讲解非常详细

    • 2、HSE_VALUE对系统的影响。在串口的初始化函数USART_Init中,配置波特率的时候使用到了系统时钟,而获取系统时钟的方法是调用RCC_GetClocksFreq函数,而RCC_GetClocksFreq函数获得系统时钟的过程是

    void RCC_GetClocksFreq(RCC_ClocksTypeDef* RCC_Clocks)
    {
      uint32_t tmp = 0, presc = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2;
    
      /* Get SYSCLK source -------------------------------------------------------*/
      tmp = RCC->CFGR & RCC_CFGR_SWS;
      
      switch (tmp)
      {
        case 0x00:  /* HSI used as system clock source */
            RCC_Clocks->SYSCLK_Frequency = HSI_VALUE;
            break;
        case 0x04:  /* HSE used as system clock  source */
            RCC_Clocks->SYSCLK_Frequency = HSE_VALUE;
            break;
    .......

     

    展开全文
  • 在操作过程中遇到表现:整体程序功能都没有问题,在调试过程中(不连Jlink)将串口直接连到电脑通过串口助手查看数据时显示乱码,此时只要把Jlink(SW)连上显示就正常了, 不是波特率问题。在乱码时不连Jlink,四孔...

    在操作过程中遇到

    表现:整体程序功能都没有问题,在调试过程中(不连Jlink)将串口直接连到电脑通过串口助手查看数据时显示乱码,此时只要把Jlink(SW)连上显示就正常了, 不是波特率问题。在乱码时不连Jlink,四孔的正负极接上3.3v电源也能使串口恢复正常,推测是因为功率不够导致的问题。


    原因:发现的原因有两个,① 使用的Jlink电压不稳,用电笔打在0.8v到0.1v直接乱蹦。② 由于板子上没有标识,将Jlink的正负极连反过,不知道是否会导致不可逆的故障

    展开全文
  • 问题是这么发生的,负责驱动的同事上个月离职了,调试他留下来的驱动程序时发现串口数据收发都不对。 用示波器抓取波形,发现输入输出波形不一致,但是大体形状相同,后来排查下来怀疑是波特率不对 对照波特率计算...

    问题是这么发生的,负责驱动的同事上个月离职了,调试他留下来的驱动程序时发现串口数据收发都不对。
    用示波器抓取波形,发现输入输出波形不一致,但是大体形状相同,后来排查下来怀疑是波特率不对在这里插入图片描述

    对照波特率计算公式在这里插入图片描述

    查看代码,代码中fck使用的是8M,在这里插入图片描述
    查看系统时钟初始化函数,pclk1是主频2分频之后的频率,而主频是64M
    在这里插入图片描述
    所以,问题应该就在这里了,修改串口的时钟为32M,烧写测试,结果正确了。

    展开全文
  • App乱码消除器1.0 官方正式版类型:游戏其他大小:1.1M语言:中文 评分:4.1标签:立即下载在通信波特率为 38400 时,通信正常,arm 板上解受到的数据(ascII码)显示正常。但是当波特率为 115200 时,解受到的数据就...
  • 串口接收数据乱码

    2019-03-12 11:02:00
    1.检查波特率等设置是否正确 2.检查文字编码是否正确 3.打印字节流 ...6.https://blog.csdn.net/kabini/article/details/1601324 串口通信丢包处理 转载于:https://www.cnblogs.com/BelieveFish/p/1...
  • 1.USB转串口的问题解决方法:我曾用一个12块钱的那种U转串,出现过乱码...但是当波特率为 115200 时,解受到的数据就出现乱码的现象!真的不知道,原因出现在哪里!希望高手们,大虾们,帮我解决下这个问题!谢谢…...
  • 在通信波特率为 38400 时,通信正常,arm 板上解受到的数据(ascII码)...波特率 换了好几档 比如9600 4800 2400 1200(我用的晶振是 11M多点的那个) 等都试过 都是乱码 区别是一个乱码来得快 一个乱码来得慢 串口线 2...
  • 本程序主要解决了串口接收数据的过程中出现乱码数据丢失的情况,特别适合于串口通信的初学者.希望能够对大家有所帮助
  • 在通信波特率为 38400 时,通信正常,arm 板上解受到的数据(ascII码)...波特率 换了好几档 比如9600 4800 2400 1200(我用的晶振是 11M多点的那个) 等都试过 都是乱码 区别是一个乱码来得快 一个乱码来得慢 串口线 2...
  • stm32 串口通信数据乱码

    千次阅读 2019-04-01 22:23:33
    小白最近在写stm32的标准库的串口通讯程序,本来很简单的串口通讯,却硬生生被上位机接收到乱码的问题折磨了好久,反复百度了好几次,始终没搜到正确解决方法,不过最后终于在...虽然最后问题和这位大佬不太一样,但是...
  • 硬件平台:STM32F030CC软件平台:RT-Thread-NANO V3.1.2问题:在移植...串口数据发送正常。串口1的配置代码:static void RccConfigure(void){/* Enable AHB Clock */RCC_AHBPeriphClockCmd( RCC_AHBPeriph_GPIOA | ...
  • 平时使用串口打印出现乱码的绝大部分原因是串口波特率没对。那么我们怎么测量实际的波特率呢?在这之前,顺便一起回顾一下波特率的概念。什么是波特率、比特率?比特率(Bitrate)表示每秒钟传输的二进制位数,单位为...
  • 串口收发乱码解决方案

    千次阅读 2020-08-03 13:08:30
    在使用基于stm32f103rct6芯片的板子实现485收发时,发现可以发送也可以接收,但是收发的数据都是乱码。 第一步,因为可收可发,引脚肯定没问题; 第二步检查波特率,检查后发现波特率也没问题; 第三步检查时钟配置...
  • 1、查看你使用的USB转串口是3.3V的串口还是5V串口,如果发送方使用的是3.3V然后你使用的USB转串口是5V是可以收到数据的但收到的数据都是错误的 2、查看波特率、奇偶校验、停止位等是否设置正确。 3、如果是STM32,...
  • 问题:测试51单片机串口通信时,设置主程序为单片机将接收到的数据发送出去,但在串口助手接收到的单片机发来的数据总是乱码。 解决:经检查,是晶振频率设置错误,将原先的12MHz改为11.0592MHz后通信正常。在设置的...
  • App乱码消除器1.0 官方正式版类型:游戏其他大小:1.1M语言:中文 评分:4.1标签:立即下载在通信波特率为 38400 时,通信正常,arm 板上解受到的数据(ascII码)显示正常。但是当波特率为 115200 时,解受到的数据就...
  • } //设置数据位 mySerialPort.DataBits = Convert.ToInt32(comboBoxDataBits.SelectedItem); //设置停止位 switch(myStopBits) { case "1": mySerialPort.StopBits = StopBits.One; break; case "2": mySerialPort....
  • 串口助手向单片机发数据乱码,或者单片机向串口助手乱码,通常是由于不同的串口软件,发送的有的是数据的16进制,有的是数据的ASCii码,查一下,然后修改下程序就可以了
  • } catch (IOException e) {} try { while (inputStream.available() > 0) {//从线路上读取数据流 int numBytes = inputStream.read(readBuffer); } str = new String(readBuffer); in_message.setText(str); System...
  • 近期在调试板子的时候,发现串口打印数据乱码。 查看板子发现晶振是8M,但是固件库使用的外部晶振默认是25M。 修改HSE_VALUE为8M后,串口功能正常。
  • STM32串口通信乱码解决方法

    千次阅读 2019-07-04 11:06:25
    STM32使用USART做串口通信实验的时候,串口调试助手能够接收到数据但出现乱码现象,显示开发板发来的数据总是问号或者不规则字体,主要原因可能是串口波特率设置不对或者系统时钟设置出问题。 波特率设置 波特率设置...
  • 使用nwjs平台 借助chrome api读取串口数据. nwjs版本:0.13.0或以上版本(及其它环境),如果不继续开发,本文件压缩包里的文件可直接拖入nwjs运行. 调试借助软件:vpsd(串口虚拟软件) 注意,本程序打开的商品为com3端口,...
  • 接收到的数据,一开始老是乱码。 [img=http://hi.csdn.net/attachment/201202/28/1370179_1330395622L012.jpg][/img] 为什么? 第二,我比特率之类的参数已经和显示器参数都设置好了。 第三。是不是因为乱码的...
  • STM32L432x芯片时,串口输出乱码问题记录 在项目中由于功能简单,对时钟频率要求不高,所以使用了内部晶振的方案...默认值16是针对47x或48x的,我使用的432x不能使用该值,手动设置该值为0,串口输出数据不再乱码了...
  • 串口调试工具,和板端对发乱码: 只连了RXD和TXD没连3.3v电源和接地,连接后正常发送 串口调试收发正常,PC端linux下软件经串口传输失败: 虚拟机用串口需要在 虚拟机->可移动设备下添加后设置,出现ttyUSB0后可...
  • STM32串口发送乱码问题 小编是一个嵌入式初学者,才学没多久,将近两个月的样子,在学习过程中遇到了一些问题,在这里给大家分享一下解决方案。...2) 串口调试助手接收数据的波特率与串口初始化时的波特率不一致(这种
  • 串口乱码

    2014-07-28 10:54:31
    1.USB转串口的问题 解决方法:我曾用一个12块钱的那种U转串,出现过乱码,换一个好的就没事了 ...但是当波特率为 115200 时,解受到的数据就出现乱码的现象! 真的不知道,原因出现在哪里! 希望高手们,大虾们
  • STM32串口通信乱码详细处理方法

    万次阅读 多人点赞 2018-01-13 10:26:24
    STM32串口通信以及温度采集搞定,其中主要遇到STM32系列单片机时钟树的问题,串口通信遇到串口调试助手能够接收到数据但出现乱码现象,开始一直以为是串口配置和程序代码问题,因为是第一次上电在线调试STM32板子,...

空空如也

空空如也

1 2 3 4 5 ... 18
收藏数 351
精华内容 140
关键字:

串口数据乱码