在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

stm325個串口的配置函數 STM32串口如何發送數據

ss ? 來源:CSDNSumjess、可以吃的魚 ? 作者:CSDNSumjess、可以吃 ? 2021-07-22 15:02 ? 次閱讀

5個串口的配置函數和收發數據函數代碼:

#include “stm32f10x.h”

#include “misc.h”

#include “stm32f10x_gpio.h”

#include “stm32f10x_usart.h”

void USART1_Configuration(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

USART_InitTypeDef USART_InitStructure;

NVIC_InitTypeDef NVIC_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE );

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE );

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //USART1 TX;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //復用推挽輸出;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, &GPIO_InitStructure); //端口A;

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //USART1 RX;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空輸入;

GPIO_Init(GPIOA, &GPIO_InitStructure); //端口A;

USART_InitStructure.USART_BaudRate = 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;

//收發模式;

USART_Init(USART1, &USART_InitStructure);//配置串口參數;

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設置中斷組,4位搶占優先級,4位響應優先級;

NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; //中斷號;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //搶占優先級;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //響應優先級;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);

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

}

void USART1_Send_Byte(u8 Data) //發送一個字節;

{

USART_SendData(USART1,Data);

while( USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET );

}

void USART1_Send_String(u8 *Data) //發送字符串;

{

while(*Data)

USART1_Send_Byte(*Data++);

}

void USART1_IRQHandler(void) //中斷處理函數;

{

u8 res;

if(USART_GetITStatus(USART1, USART_IT_RXNE) == SET) //判斷是否發生中斷;

{

USART_ClearFlag(USART1, USART_IT_RXNE); //清除標志位;

res=USART_ReceiveData(USART1); //接收數據;

USART1_Send_Byte(res); //用戶自定義;

}

}

void USART2_Configuration(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

USART_InitTypeDef USART_InitStructure;

NVIC_InitTypeDef NVIC_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE );

RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE );

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //USART2 TX;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //復用推挽輸出;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, &GPIO_InitStructure); //端口A;

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; //USART2 RX;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空輸入;

GPIO_Init(GPIOA, &GPIO_InitStructure); //端口A;

USART_InitStructure.USART_BaudRate = 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;

//收發模式;

USART_Init(USART2, &USART_InitStructure);//配置串口參數;

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設置中斷組,4位搶占優先級,4位響應優先級;

NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn; //中斷號;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //搶占優先級;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //響應優先級;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);

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

}

void USART2_Send_Byte(u8 Data) //發送一個字節;

{

USART_SendData(USART2,Data);

while( USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET );

}

void USART2_Send_String(u8 *Data) //發送字符串;

{

while(*Data)

USART2_Send_Byte(*Data++);

}

void USART2_IRQHandler(void) //中斷處理函數;

{

u8 res;

if(USART_GetITStatus(USART2, USART_IT_RXNE) == SET) //判斷是否發生中斷;

{

USART_ClearFlag(USART2, USART_IT_RXNE); //清除標志位;

res=USART_ReceiveData(USART2); //接收數據;

USART2_Send_Byte(res); //用戶自定義;

}

}

void USART3_Configuration(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

USART_InitTypeDef USART_InitStructure;

NVIC_InitTypeDef NVIC_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE );

RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE );

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //USART3 TX;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //復用推挽輸出;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOB, &GPIO_InitStructure); //端口B;

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; //USART3 RX;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空輸入;

GPIO_Init(GPIOB, &GPIO_InitStructure); //端口B;

USART_InitStructure.USART_BaudRate = 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;

//收發模式;

USART_Init(USART3, &USART_InitStructure);//配置串口參數;

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設置中斷組,4位搶占優先級,4位響應優先級;

NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn; //中斷號;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //搶占優先級;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //響應優先級;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);

USART_Cmd(USART3, ENABLE); //使能串口;

}

void USART3_Send_Byte(u8 Data) //發送一個字節;

{

USART_SendData(USART3,Data);

while( USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET );

}

void USART3_Send_String(u8 *Data) //發送字符串;

{

while(*Data)

USART3_Send_Byte(*Data++);

}

void USART3_IRQHandler(void) //中斷處理函數;

{

u8 res;

if(USART_GetITStatus(USART3, USART_IT_RXNE) == SET) //判斷是否發生中斷;

{

USART_ClearFlag(USART3, USART_IT_RXNE); //清除標志位;

res=USART_ReceiveData(USART3); //接收數據;

USART3_Send_Byte(res); //用戶自定義;

}

}

void UART4_Configuration(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

USART_InitTypeDef USART_InitStructure;

NVIC_InitTypeDef NVIC_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE );

RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4, ENABLE );

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //UART4 TX;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //復用推挽輸出;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOC, &GPIO_InitStructure); //端口C;

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; //UART4 RX;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空輸入;

GPIO_Init(GPIOC, &GPIO_InitStructure); //端口C;

USART_InitStructure.USART_BaudRate = 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;

//收發模式;

USART_Init(UART4, &USART_InitStructure);//配置串口參數;

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設置中斷組,4位搶占優先級,4位響應優先級;

NVIC_InitStructure.NVIC_IRQChannel = UART4_IRQn; //中斷號;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //搶占優先級;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //響應優先級;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

USART_ITConfig(UART4, USART_IT_RXNE, ENABLE);

USART_Cmd(UART4, ENABLE); //使能串口;

}

void UART4_Send_Byte(u8 Data) //發送一個字節;

{

USART_SendData(UART4,Data);

while( USART_GetFlagStatus(UART4, USART_FLAG_TC) == RESET );

}

void UART4_Send_String(u8 *Data) //發送字符串;

{

while(*Data)

UART4_Send_Byte(*Data++);

}

void UART4_IRQHandler(void) //中斷處理函數;

{

u8 res;

if(USART_GetITStatus(UART4, USART_IT_RXNE) == SET) //判斷是否發生中斷;

{

USART_ClearFlag(UART4, USART_IT_RXNE); //清除標志位;

res=USART_ReceiveData(UART4); //接收數據;

UART4_Send_Byte(res); //用戶自定義;

}

}

void UART5_Configuration(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

USART_InitTypeDef USART_InitStructure;

NVIC_InitTypeDef NVIC_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD, ENABLE );

RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART5, ENABLE );

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; //UART5 TX;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //復用推挽輸出;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOC, &GPIO_InitStructure); //端口C;

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //UART5 RX;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空輸入;

GPIO_Init(GPIOD, &GPIO_InitStructure); //端口D;

USART_InitStructure.USART_BaudRate = 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;

//收發模式;

USART_Init(UART5, &USART_InitStructure);//配置串口參數;

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設置中斷組,4位搶占優先級,4位響應優先級;

NVIC_InitStructure.NVIC_IRQChannel = UART5_IRQn; //中斷號;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //搶占優先級;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //響應優先級;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

USART_ITConfig(UART5, USART_IT_RXNE, ENABLE);

USART_Cmd(UART5, ENABLE); //使能串口;

}

void UART5_Send_Byte(u8 Data) //發送一個字節;

{

USART_SendData(UART5,Data);

while( USART_GetFlagStatus(UART5, USART_FLAG_TC) == RESET );

}

void UART5_Send_String(u8 *Data) //發送字符串;

{

while(*Data)

UART5_Send_Byte(*Data++);

}

void UART5_IRQHandler(void) //中斷處理函數;

{

u8 res;

if(USART_GetITStatus(UART5, USART_IT_RXNE) == SET) //判斷是否發生中斷;

{

USART_ClearFlag(UART5, USART_IT_RXNE); //清除標志位;

res=USART_ReceiveData(UART5); //接收數據;

UART5_Send_Byte(res); //用戶自定義;

}

STM32串口發送數據

1. 串口發送數據最直接的方式就是標準調用庫函數 。

void Send_data(u8 *s)

{

while(*s!=‘\0’)

{

while(USART_GetFlagStatus(USART1,USART_FLAG_TC )==RESET);

USART_SendData(USART1,*s);

s++;

}

}

2. 直接使用printf函數。

可以吃的魚

整合自:CSDNSumjess、可以吃的魚

編輯:jq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • STM32
    +關注

    關注

    2283

    文章

    10986

    瀏覽量

    361177
收藏 人收藏

    評論

    相關推薦

    PL2303串口驅動

    PL2303串口驅動
    發表于 04-09 16:02 ?0次下載

    cp2102串口驅動

    cp2102串口驅動
    發表于 04-09 16:01 ?2次下載

    STM32串口下載軟件(FLYMCU)

    STM32串口下載軟件(FLYMCU),經典版本,親試可用。
    發表于 04-09 15:59 ?0次下載

    STM32G4串口無法發送正確的信息是怎么回事?

    STM32G4串口無法發送正確的信息
    發表于 03-14 07:14

    STM32串口通信,上電和斷電串口助手會返回數是怎么回事?

    STM32串口通信,上電和斷電串口助手會返回數,是為什么呢
    發表于 03-12 07:57

    使用Labview做一485串口電子秤程序

    232、485串口通訊是最常見的儀器儀表通訊方式之一,本文詳細介紹,用Labview編寫一電子秤的485串口程序.
    發表于 03-06 18:11 ?0次下載

    用Labview寫一電子稱的485串口程序

    關鍵詞:Labview + 串口程序 232、485串口通訊是最常見的儀器儀表通訊方式之一,本文詳細介紹,用Labview編寫一電子秤的485串口程序.
    的頭像 發表于 03-06 09:54 ?434次閱讀
    用Labview寫一<b class='flag-5'>個</b>電子稱的485<b class='flag-5'>串口</b>程序

    LS10串口數據庫模塊外擴SD卡功能

    LS10串口數據庫模塊外擴SD卡功能
    的頭像 發表于 11-23 09:42 ?401次閱讀
    LS10<b class='flag-5'>串口</b><b class='flag-5'>數據</b>庫模塊外擴SD卡功能

    快速實現C2000串口程序升級

    電子發燒友網站提供《快速實現C2000串口程序升級.pdf》資料免費下載
    發表于 08-29 10:50 ?2次下載
    快速實現C2000<b class='flag-5'>串口</b>程序升級

    stm32串口燒錄怎么設置

    準備工作 確保您擁有STM32開發板和相應的硬件設備,如USB轉串口模塊。 安裝STM32CubeMX和STM32CubeProgrammer軟件,這些是ST官方提供的工具,用于
    的頭像 發表于 08-22 09:33 ?2606次閱讀

    用esp32的串口Stm32F407串口通訊,通過TJA轉CAN,結果esp32串口讀到的一直是自己發的數據,為什么?

    我用esp32的串口Stm32F407串口通訊,通過TJA轉CAN。結果esp32串口讀到的一直是自己發的數據,各位大神給我看看哪里有問題
    發表于 06-19 07:00

    485串口可以用can協議嗎

    一、引言 隨著工業自動化和智能控制技術的發展,通信協議在設備間數據傳輸和控制中扮演著越來越重要的角色。485串口和CAN協議是兩種常見的通信協議,它們在不同的應用場景中發揮著重要作用。本文將對這兩種
    的頭像 發表于 06-16 09:21 ?1942次閱讀

    STM32做以太網轉4串口單核能做嗎?

    目前要做一以太網轉4串口透傳模塊,一STM32能搞定嗎?是不是需要什么內核、?求解~~對內核了解不多,裸機100年
    發表于 05-13 07:27

    Nucleo F303k8串口調試能發送,但是不能接收,為什么?

    。 問題描述: (1)字符發送正常,用串口助手都能收到,會進入中斷函數USARTx_IRQHandler; (2)通過串口助手
    發表于 05-10 07:40

    STM32 hal庫無法接收串口數據是怎么回事?

    型號:STM32L432KC官方開發板 串口使用的是板載的USB下載以及串口 用法: 在串口初始化后,while(1)之前調用 接收中斷
    發表于 04-29 06:11
    主站蜘蛛池模板: 亚洲激情网站 | 日本福利小视频 | 成人黄色激情网 | 九月婷婷综合 | 欧美性猛交xxxx乱大交 | 色中色在线视频 | 色婷婷精品 | 午夜免费| 香蕉视频久久久 | 四虎在线永久视频观看 | 国产三级在线观看免费 | 优优国产在线视频 | 免费色黄网站 | 中日韩在线视频 | 亚洲美女视频一区 | 国产亚洲小视频 | 特黄色毛片 | 久久国产福利 | 亚洲aaa视频 | 久久精品视频免费播放 | www.色.con| 亚洲一区二区三区免费观看 | 天天插天天操天天干 | 在线免费视频一区二区 | 天天干天天天天 | free chinese 国产精品 | 不卡的毛片 | 黄色网页在线播放 | 性色影院 | 色成年激情久久综合 | 久久久久久毛片免费播放 | 成人精品人成网站 | 天天色天天爽 | 久久艹免费视频 | 亚洲欧洲综合网 | 国产美女一区二区三区 | 亚洲第二色 | www我要色综合com | 爱爱456高清国语在线456 | 中文字幕在线看视频一区二区三区 | 五月激情视频 |