1. 程式人生 > >Stm32串列埠傳送字串資料

Stm32串列埠傳送字串資料

ps:把字串分成位元組迴圈傳送

/*
*說明:
*PA0:KEY1;PA1:KEY2;
*PA2:LED1;PA3:LED2;
*PA9:USART1_TX;PA10:USART1_RX
*/
#include "stm32f10x.h"  
#include "stm32f10x_rcc.h"  
#include "stm32f10x_gpio.h"  
#include "stm32f10x_usart.h" 
#include "stm32f10x_crc.h"
#include "system_stm32f10x.h" 
#include "stdio.h" 

#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)

void RCC_Configuration(void);  
void GPIO_Configuration(void); 
void USART_Configuration(void); 
void delay_ms(u16 time);
void UART_PutChar(USART_TypeDef* USARTx, uint8_t Data);
void UART_PutStr (USART_TypeDef* USARTx, uint8_t *str);

int main()
{
    SystemInit();
    
    RCC_Configuration();  
    GPIO_Configuration();   
    USART_Configuration(); 
    while(1)
    {
      printf("\n傳送的資訊:");
      UART_PutStr(USART1, "hello world!"); 
      delay_ms(1000);  
    } 
    
}
void RCC_Configuration(void)    
{     
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);     
}   
  
void GPIO_Configuration(void)    
{    
  GPIO_InitTypeDef GPIO_InitStructure;    
    
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;             //管腳9  
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;       //複用推輓輸出  
  GPIO_Init(GPIOA, &GPIO_InitStructure);                //TX初始化  
    
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;            //管腳10  
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;         //上拉輸入  
  GPIO_Init(GPIOA, &GPIO_InitStructure);                //RX初始化  
     
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3;//LED GPIO_Pin_All    
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  
  GPIO_Init(GPIOA, &GPIO_InitStructure);   
}
void USART_Configuration(void)//串列埠初始化函式  
{  
    //串列埠引數初始化    
    USART_InitTypeDef USART_InitStructure;               //串列埠設定恢復預設引數  
    //初始化引數設定  
    USART_InitStructure.USART_BaudRate = 9600;                  //波特率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;//開啟Rx接收和Tx傳送功能  
    USART_Init(USART1,&USART_InitStructure);                   //初始化  
    USART_Cmd(USART1,ENABLE);                                  //啟動串列埠  
}
void delay_ms(u16 time)     
{    
  u16 i=0;    
  while(time--)     
  {    
    i=12000;    
    while(i--);    
  }    
} 
int putchar(int c)                                            //putchar函式  
{  
    if (c == '\n'){putchar('\r');}                                 //將printf的\n變成\r  
    USART_SendData(USART1, c);                                   //傳送字元  
    while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET){} //等待發送結束  
    return c;                                                      //返回值  
} 
void UART_PutChar(USART_TypeDef* USARTx, uint8_t Data)
{
    USART_SendData(USARTx, Data);
    while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET){}
}
void UART_PutStr (USART_TypeDef* USARTx, uint8_t *str)  
{  
    while (0 != *str)  
    {  
        UART_PutChar(USARTx, *str);  
        str++;  
    }  
} 


相關推薦

Stm32串列傳送字串資料

ps:把字串分成位元組迴圈傳送 /* *說明: *PA0:KEY1;PA1:KEY2; *PA2:LED1;PA3:LED2; *PA9:USART1_TX;PA10:USART1_RX */ #include "stm32f10x.h" #include "stm32

STM32串列傳送資料和接收資料方式總結

       之前寫了篇關於ESP8266使用AT指令進行互相通訊的實驗,在寫STM32串列埠接發資料的程式中,覺得有必要將之前學的有關於串列埠方面的使用經歷加以總結。 串列埠傳送資料:        1. 串列埠傳送資料最直接的方式就是標準呼叫庫函式 。 void

RTOS_TINY中實現串列傳送字串控制LED

題目內容 在RTOS_TINY作業系統下實現以下目標: 有四個LED,使用AT89S52的4個引腳驅動它們分別以5Hz,8Hz,20Hz,32Hz的頻率閃爍。設使用12MHz的晶振。用串列埠助手,通過傳送 “TURN on 1”,使得LED1持續閃爍,並回顯“LED1 on”;傳送

小蜜蜂微控制器串列傳送字串

void UART0_SendString(unsigned char *String, int start, int stop) { int i = 0; if (stop <= start) { stop = start; } for (i = start; i <=

STM32串列接收字串並控制LED

串列埠相關配置 GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Peri

串列傳送字串和十六進位制原始碼

 /**   * @brief  USART GPIO 配置,工作引數配置   * @param  無   * @retval 無   */ void USART_Config(void) {     GPIO_InitTypeDef GPIO_InitStructure;

Qt中串列傳送HEX資料

             在lineEdit輸入資料的型別是QString型別,以往我在傳送的時候是ASCII方式傳送,這會兒突然遇到一個是十六進位制傳送/接受的下位機,就需要將QString 轉化為十六進位制,本來直接用toHex進行轉化,但考慮到在輸入的的時候有間隔符之

STM32串列傳送資料(字元,字串,數字.......)(重點)

#include "stm32f10x.h" #include <stdio.h>    //下面strlen函式需要此標頭檔案 #include "USART.h" /**********************************************

STM32串列通訊中使用printf傳送資料配置方法(開發環境 Keil RVMDK)

出處:STM32串列埠通訊中使用printf傳送資料配置方法(開發環境 Keil RVMDK) http://home.eeworld.com.cn/my/space-uid-338727-blogid-47176.html 在STM32串列埠通訊程式中使用printf傳送資料,非常的方便。

關於RS485通訊中使用STM32串列以DMA方式傳送資料丟失位元組的問題

1、開發平臺 計算機作業系統:WIN7 64位; 開發環境:Keil MDK 5.14; MCU:STM32F407ZET6; STM32F4xx韌體庫:STM32F4xx_DSP_StdPeriph_Lib_V1.4.0; 串列埠除錯助手; 2、問題描述  &

初識stm32-----串列1的字串與字元的傳送

STM32的串列埠1的字串與字元的傳送,一開始卡在不知道怎麼把字串發出來,參考別人的程式碼之後的程式如下: (雖然最後成功但是還需要努力ヾ(◍°∇°◍)ノ゙) PS:本程式模板用的是正點原子的模板。 主程式: #include "stm32f10x.h" #includ

VB 串列傳送,將文字中的字串轉化成16進位制資料傳送

VB寫一個串列埠傳送程式碼,遇到一個問題,如何將文字中的字串轉化成16進位制資料傳送。 Dim bindate(200) As String Dim senddata As String ‘定義輸入字串變

關於arduino通過串列傳送到processing的資料混亂(錯誤\顯示不正確)的問題解答

最近的教學中,已經開始使用processing和arduino進行串列埠通訊的互動,使用中發現有的同學遇到了arduino傳送給processing的資料存在顯示不正確,甚至混亂的現象。這裡給予統一解釋。 arduino程式碼完成的工作是將模擬訊號口讀入模擬資料,然後經過map對映為0到

使用python在openwrt下操作串列傳送十六進位制資料

#!/usr/bin/python import serial from time import sleep ser = serial.Serial('/dev/ttyS0', 9600, timeout=0.5) print ser.port print ser.baudrate if

菜鳥江濤帶你學最小物聯網系統之模組篇(02)——STM32通過串列傳送AT指令控制ESP模組連線伺服器

接著上一篇繼續,這篇部落格我將帶大家使用STM32的串列埠來發送AT指令給ESP模組連線伺服器。當然目前測試使用的是區域網,自己的電腦當伺服器使用。使用TCP連線伺服器,STM32通過ESP12F模組透傳上傳溫溼度資料到伺服器。看下效果圖片 好了,看下主要的實現程式

STM32串列列印printf傳送中文亂碼問題

1、首先要確保使用keil程式正確編譯,並且程式經過除錯,已經可以正常傳送英文字元,但是傳送中文字元時亂碼。2、使用記事本開啟main.c檔案(或其他主程式),點選另存為,在右下方選擇編碼方式為ANSI,替換原檔案即可

關於微控制器串列傳送時初始傳送資料第一個總是00的問題解決

在除錯STM8的串列埠時候,串列埠IO初始化,串列埠配置,傳送資料除錯~~ 連線好串列埠線後,發現初始化後傳送的第一個資料總是00,後面的資料才是正常的資料。 折騰了大半天,終於發現了原因了,那就是初始化串列埠後不能馬上傳送資料,要經過一定時間延遲。 問題程式碼如下: &l

串列傳送資料查詢方式與中斷方式

微控制器採用中斷或查詢方式使用串列埠,這是根據實際應用的需要確定的,沒有好/壞之分。有時之所以採用查詢方式處理串列埠程式,是因為應用程式不苛刻微控制器的時間資源,採用查詢的方式就能滿足應用的需要,所以沒采用中斷。大量連續的向串列埠傳送資料,就沒有必要使用中斷了,因為微控制器根

FPGA 學習筆記(十二) 如何用串列傳送32位資料

在筆者之前所用的串列埠中,串列埠一次只能傳送資料為8位,這跟串列埠通訊的協議方式有關係。而最近筆者的專案中需要用到一次傳送32位的資料。筆者最開始想到的是32位資料傳送4次。 為了不改動原來的串列埠通訊協議驅動,筆者設計瞭如下發送方式: 設計四個狀態stat

移遠BC95 NB-IoT模組串列傳送資料到伺服器

    本文適用於對NB-IoT一無所知的小白。目的是通過NB-IoT協議將資料傳送到伺服器端。     現在已有不少NB-IoT模組,本人採用的是移遠的BC95模組。     接線:外接電源供電 串列埠接右下角三個介面,GND