標題: STM8L151串口通信程序 [打印本頁]
作者: xbbb1 時間: 2019-2-20 10:36
標題: STM8L151串口通信程序
最近學習開發STM8 MCU,,剛入手這顆MCU,對很多功能不太了解,只能一邊開發一邊學習,記錄一下學習過程,如有錯誤的地方,敬請指正。
MCU:STM8L151K4
環境:IAR FOR STM8
- #include "uart.h"
- #include <stdarg.h>
- #include <string.h>
- void UARTInit(void)
- {
-
- GPIO_Init(GPIOC, GPIO_Pin_3, GPIO_Mode_Out_PP_High_Fast);//TXD
- GPIO_Init(GPIOC, GPIO_Pin_2, GPIO_Mode_In_PU_No_IT);//RXD
- CLK_PeripheralClockConfig(CLK_Peripheral_USART1, ENABLE);
- USART_DeInit(USART1); //復位UART1
- USART_Init(USART1, (u32)115200, USART_WordLength_8b, USART_StopBits_1, USART_Parity_No, USART_Mode_Rx|USART_Mode_Tx);
- USART_ClearITPendingBit(USART1, USART_IT_RXNE);
- USART_ITConfig( USART1, USART_IT_RXNE, ENABLE ); //開啟接收中斷
- // USART_ITConfig( USART1, USART_IT_TC, DISABLE ); //關閉傳輸完成中斷
- USART_Cmd(USART1, ENABLE );
-
- }
- /*
- * 函數介紹: 發送一個字節
- * 輸入參數: 需要發送的數據
- * 返回值: 無
- */
- void UARTSendData(u8 data){
-
- USART_SendData8(USART1, data);
- /* 等待傳輸結束 */
- while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
- }
- void UARTSendBuf(u8* Data, u16 len){
- u16 i = 0;
- for(; i<len ;i++)
- UARTSendData(Data[i]);
- }
- /*
- * 函數介紹: 發送任意字符串
- * 輸入參數: 變參
- * 返回值: 無
- */
- void UARTSendString(char *format, ...)
- {
- char strBuf[64];
- va_list ap; //初始化指向可變參數列表的指針
- va_start(ap, format); //將第一個可變參數的地址賦給ap,即ap指向可變參數列表的開始
- vsprintf(strBuf, format, ap); //將參數ap和format進行轉化形成格式化字符串,即可以顯示的字符串
- strBuf[63] = 0;
- UARTSendBuf(strBuf, strlen(strBuf));
- va_end(ap);
- }
- /*
- * 函數介紹: 接收一個字節
- * 輸入參數: 無
- * 返回值: USART1_RX_BUF,接收的數據
- */
- u8 UARTReceiveByte(void)
- {
-
- u8 USART1_RX_BUF;
-
- /* 等待接收完成 */
- while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);
-
- USART1_RX_BUF = USART_ReceiveData8(USART1);
-
- return USART1_RX_BUF;
-
- }
- /*
- * 函數名:itoa
- * 描述 :將整形數據轉換成字符串
- * 輸入 :-radix =10 表示10進制,其他結果為0
- * -value 要轉換的整形數
- * -buf 轉換后的字符串
- * -radix = 10
- * 輸出 :無
- * 返回 :無
- * 調用 :被USART1_printf()調用
- */
- static char *itoa(int value, char *string, int radix)
- {
- int i, d;
- int flag = 0;
- char *ptr = string;
-
- /* This implementation only works for decimal numbers. */
- if (radix != 10)
- {
- *ptr = 0;
- return string;
- }
-
- if (!value)
- {
- *ptr++ = 0x30;
- *ptr = 0;
- return string;
- }
-
- /* if this is a negative value insert the minus sign. */
- if (value < 0)
- {
- *ptr++ = '-';
- /* Make the value positive. */
- value *= -1;
- }
-
- for (i = 10000; i > 0; i /= 10)
- {
- d = value / i;
-
- if (d || flag)
- {
- *ptr++ = (char)(d + 0x30);
- value -= (d * i);
- flag = 1;
- }
- }
-
- /* Null terminate the string. */
- *ptr = 0;
-
- return string;
-
- } /* NCL_Itoa */
- /*
- * 函數名:UART1_printf
- * 描述 :格式化輸出,類似于C庫中的printf,但這里沒有用到C庫
- * 輸入 :-UARTx 串口通道,這里只用到了串口1,即UART1
- * -Data 要發送到串口的內容的指針
- * -... 其他參數
- * 輸出 :無
- * 返回 :無
- * 調用 :外部調用
- * 典型應用 UART1_printf( \"\r\n this is a demo \r\n\" );
- * UART1_printf( \"\r\n %d \r\n\", i );
- * UART1_printf( \"\r\n %s \r\n\", j );
- */
- void UART1Printf(u8 *Data , ...)
- {
- const char *s;
- int d;
- char buf[16];
- va_list ap;
- va_start(ap, Data);
-
- while ( *Data != 0) // 判斷是否到達字符串結束符
- {
- if ( *Data == 0x5c ) //'\'
- {
- switch ( *++Data )
- {
- case 'r': //回車符
- USART_SendData8(USART1, 0x0d);
- Data ++;
- break;
-
- case 'n': //換行符
- USART_SendData8(USART1, 0x0a);
- Data ++;
- break;
-
- default:
- Data ++;
- break;
- }
- }
- else if ( *Data == '%')
- { //
- switch ( *++Data )
- {
- case 's': //字符串
- s = va_arg(ap, const char *);
- for ( ; *s; s++)
- {
- USART_SendData8(USART1, *s);
- while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
- }
- Data++;
- break;
- case 'd': //十進制
- d = va_arg(ap, int);
- itoa(d, buf, 10);
- for (s = buf; *s; s++)
- {
- USART_SendData8(USART1, *s);
- while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
- }
- Data++;
- break;
- default: Data++;
- break;
- }
- } /* end of else if */
- else USART_SendData8(USART1, *Data++);
- while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
- }
- }
復制代碼 全部資料51hei下載地址:
USBDongle-Lock.7z
(1.24 MB, 下載次數: 104)
2019-2-20 16:46 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者: ontheroad 時間: 2019-3-12 13:58
STM8L151串口通信程序,非常實用。串口通訊,確實少不了。
作者: NetFireQiu 時間: 2019-5-13 20:21
STM8L151串口通信程序,非常實用。串口通訊,確實少不了,Niex
作者: Mayday8888 時間: 2019-9-16 16:52
好資料,下載學習
作者: gy51xx 時間: 2019-12-22 16:56
您好,這個壓縮包損壞了
歡迎光臨 (http://www.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
超碰97人人人人人蜜桃
|
中国av在线免费观看
|
精品久久久久久亚洲精品
|
国产黄色大片
|
欧美一区二区三区在线播放
|
久久99国产精品久久99果冻传媒
|
美女久久久久久久久
|
久久久不卡网国产精品一区
|
av黄在线观看
|
国产精品久久久久久久久久软件
|
日韩中文字幕一区二区
|
www国产精品
|
91精品国产综合久久精品
|
中国一级大毛片
|
日韩精品久久
|
成人高潮片免费视频欧美
|
国产精品日韩欧美一区二区
|
国产精品美女久久久久aⅴ国产馆
|
亚洲国产精品久久久
|
日本不卡在线视频
|
久久国产精品91
|
国产1区2区3区
|
天天射影院
|
精品久|
欧美日韩国产高清
|
三级免费毛片
|
日韩三级免费观看
|
国产小视频在线
|
一区二区在线不卡
|
国产在线一区二区三区
|
www.日韩|
欧美日韩三级
|
黄色大片免费观看
|
男女免费视频网站
|
成人国产精品免费观看
|
精品久久久网站
|
欧美一区不卡
|
国产人成精品一区二区三
|
91资源在线
|
日韩在线视频精品
|
国产片侵犯亲女视频播放
|