在线观看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
    +關注

    關注

    2270

    文章

    10915

    瀏覽量

    356787
收藏 人收藏

    評論

    相關推薦

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

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

    快速實現C2000串口程序升級

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

    stm32串口燒錄怎么設置

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

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

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

    485串口可以用can協議嗎

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

    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

    HAL庫STM32串口2發送數組給串口1異常的原因?

    剛結束STM32,所以想請教一下。就是我想用串口2接收數據然后發送串口1,串口1接收后再
    發表于 04-25 06:01

    Python怎么讀取STM32串口數據

    =ser.readlines()print(s) 可是什么都讀取不了。如果用買的STM32開發板送的串口助手,能接收到數據。板子上燒錄的printf輸出程序。 請問各位大神,Python程序要怎么寫才能讀取
    發表于 04-24 07:30

    STM32F407VET6串口5的三引腳TX RX GND跟STM32F103VET6串口5的RX TX GND三引腳相連后燒毀的原因?

    我把STM32F407VET6芯片的串口5的三引腳TX RX GND分別跟STM32F103VET6串口5的RX TX GND 三
    發表于 03-26 08:03

    STM32串口發送起始數據丟失的原因?怎么處理?

    今天遇到有意思的情況,就是采用串口發送的時候,最開始開機第一次發送的時候,第一個數據會丟失,比如我要
    發表于 03-20 06:48

    使用CubeMX配置STM32010C6T6的LPUART1外設,調用串口發送和接收函數均不能收發數據怎么解決?

    如題,STM32010C6T6串口1配置完成后,Cube界面接收引腳模式默認為推挽輸出,并且沒有其它選項可以更改,(其它系列MCU默認是輸入模式)生成的工程調用串口
    發表于 03-19 07:48

    STM32G031k8t6串口發送為什么會進入硬件中斷?

    STM32G031k8t6串口發送進入硬件中斷
    發表于 03-13 07:59

    ZDP1440串口屏應用開發如何使用虛擬串口調試

    ZDP1440串口屏應用開發如何使用虛擬串口調試呢?本文將詳細方法分享給大家。
    的頭像 發表于 01-25 11:32 ?1743次閱讀
    ZDP1440<b class='flag-5'>串口</b>屏應用開發如何使用虛擬<b class='flag-5'>串口</b>調試
    主站蜘蛛池模板: 91大神精品在线观看| 亚洲一区免费在线观看| 素股中文字幕| 国产叼嘿视频网站在线观看| 国产综合在线播放| 91色爱| 两性色午夜视频免费网| 日本最顶级丰满的aⅴ艳星| 日韩高清一级| 欧美xxxxbbbb在线播放| 久久成人亚洲| 欧美精品二区| 猫色网站| 欧美性狂猛bbbbbxxxxx| 欧美一级日韩一级亚洲一级| 特黄一级黄色片| 色噜噜狠狠狠狠色综合久一| 欧美一区二区三区性| 可以直接看的黄址| 大香伊在人线免费| 狠狠狠色丁香婷婷综合久久88| 国模精品视频| 免费日本网站| 国产一区二区影院| 一本到视频在线| 国产成人综合一区人人| 美女网站在线观看视频18| 亚洲专区一| 一色屋精品免费视频 视频| 色香蕉在线视频| 婷婷六月激情| 欧美一区福利| 岛国毛片一级一级特级毛片| 午夜干b| 成年女人毛片| 免费看的黄视频| 四虎久久精品国产| 日本香蕉视频| 人人看人人干| 日本国产在线| 国产r67194吃奶视频|