发新帖我要提问
12
返回列表
打印
[其他ST产品]

STM32串口发送接收数据

[复制链接]
楼主: 在水一方00
手机看帖
扫描二维码
随时随地手机跟帖
21
在水一方00|  楼主 | 2023-9-24 00:48 | 只看该作者 |只看大图 回帖奖励 |倒序浏览

使用特权

评论回复
22
在水一方00|  楼主 | 2023-9-24 00:49 | 只看该作者
led.h
#include "stm32f10x.h"
void Led_init(void);

使用特权

评论回复
23
在水一方00|  楼主 | 2023-9-24 00:49 | 只看该作者
led.c
#include "stm32f10x.h"
#include "led.h"

void Led_init(void)
{
        GPIO_InitTypeDef Led_init;
       
        //1.ʹÄÜAPB2µÄʱÖÓGPIO
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
       
        //2.½á¹¹ÌåÅäÖÃ
        Led_init.GPIO_Mode         = GPIO_Mode_Out_PP;
        Led_init.GPIO_Pin          = GPIO_Pin_13;
        Led_init.GPIO_Speed = GPIO_Speed_10MHz;
       
        GPIO_Init(GPIOC, &Led_init);
}

使用特权

评论回复
24
在水一方00|  楼主 | 2023-9-24 00:49 | 只看该作者
usart.h
#include "stm32f10x.h"
#include <stdio.h>

void usart_init(void);
void usartSendByte(USART_TypeDef* USARTx, uint16_t Data);
void usartSendStr(USART_TypeDef* USARTx,char *str);

使用特权

评论回复
25
在水一方00|  楼主 | 2023-9-24 00:49 | 只看该作者
usart.c

#include "usart.h"
#include "stm32f10x.h"

void usart_init(void)
{
        GPIO_InitTypeDef  gpio_init;
        USART_InitTypeDef usartStruct;
        NVIC_InitTypeDef  nvic_initStruct;
       
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
       
        //1.ÅäÖÃʱÖÓ£ºGPIO¿ÚµÄʱÖÓ£¬Òý½Å¸´ÓõÄʱÖÓ£¬´®¿ÚµÄʱÖÓ
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
       
        //2.ÅäÖÃGPIOµÄ½á¹¹Ìå
        //2.1 TX
        gpio_init.GPIO_Mode = GPIO_Mode_AF_PP;
        gpio_init.GPIO_Pin = GPIO_Pin_9;
        gpio_init.GPIO_Speed = GPIO_Speed_10MHz;
       
        GPIO_Init(GPIOA,&gpio_init);
       
        //2.2 RX
        gpio_init.GPIO_Mode = GPIO_Mode_IN_FLOATING;
        gpio_init.GPIO_Pin = GPIO_Pin_10;
       
        GPIO_Init(GPIOA,&gpio_init);
       
        //3.ÅäÖô®¿ÚµÄ½á¹¹Ìå
        usartStruct.USART_BaudRate = 115200;
        usartStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
        usartStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
        usartStruct.USART_Parity = USART_Parity_No;
        usartStruct.USART_StopBits = USART_StopBits_1;
        usartStruct.USART_WordLength = USART_WordLength_8b;
       
        USART_Init(USART1,&usartStruct);
        USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//ÅäÖô®¿ÚÖжÏ
        USART_Cmd(USART1, ENABLE );
       
        nvic_initStruct.NVIC_IRQChannel = USART1_IRQn;
        nvic_initStruct.NVIC_IRQChannelPreemptionPriority = 1;
        nvic_initStruct.NVIC_IRQChannelSubPriority = 1;
        nvic_initStruct.NVIC_IRQChannelCmd = ENABLE;
       
        NVIC_Init(&nvic_initStruct);

       
}

//·â×°ÁËһϷ¢ËÍ×Ö·û
void usartSendByte(USART_TypeDef* USARTx, uint16_t Data)
{
        USART_SendData(USARTx,Data);
        while(USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET);

}

//·¢ËÍ×Ö·û´®
void usartSendStr(USART_TypeDef* USARTx,char *str)
{
        uint16_t i = 0;
        do{
                usartSendByte(USARTx,*(str+i));
                i++;
        }while(*(str+i) != '\0');

        //ÅжÏÊÇ·ñ·¢ËÍÍê
        while(USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET);
}

int fputc(int ch,FILE *f)
{
        USART_SendData(USART1,(uint8_t)ch);
        while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
       
        return (ch);
}

int fgetc(FILE *f)
{
        while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);
       
        return (int) USART_ReceiveData(USART1);
}

使用特权

评论回复
26
在水一方00|  楼主 | 2023-9-24 00:50 | 只看该作者
main.c

#include "stm32f10x.h"
#include "led.h"
#include "relay.h"
#include "shake.h"
#include "exti.h"
#include "usart.h"
#include "stdio.h"

void delay(uint16_t time)
{
        uint16_t i =0;
        while(time--){
                i=12000;
                while(i--);
        }
}

int main()
{
        Led_init();
        Relay_Init();
        Shake_init();
        exti_init();
        usart_init();
       
        //³õʼ»¯Òý½Å
        GPIO_SetBits(GPIOA, GPIO_Pin_3);
        GPIO_SetBits(GPIOC, GPIO_Pin_13);

}

void EXTI1_IRQHandler(void)
{
        if (EXTI_GetITStatus( EXTI_Line1 ) != RESET){// ÅжÏÊÇ·ñ·¢ÉúÖжÏ
                GPIO_ResetBits(GPIOA, GPIO_Pin_3);
                usartSendStr(USART1,"Open light success\r\n");
                delay(1000);
                GPIO_SetBits(GPIOA, GPIO_Pin_3);
                usartSendStr(USART1,"Close light success\r\n");
        }

        EXTI_ClearFlag(EXTI_Line1);
       
}

void USART1_IRQHandler(void)
{
        char temp;
       
        if(USART_GetITStatus(USART1,USART_IT_RXNE) != RESET){
               
                temp = USART_ReceiveData(USART1);

                if(temp == 'o'){
                        GPIO_ResetBits(GPIOC, GPIO_Pin_13);
                        usartSendStr(USART1,"Open LED light success\r\n");
                }
               
                if(temp == 'c'){
                        GPIO_SetBits(GPIOC, GPIO_Pin_13);
                        usartSendStr(USART1,"Close LED light success\r\n");
                }
        }
}
       

使用特权

评论回复
27
在水一方00|  楼主 | 2023-9-24 00:50 | 只看该作者
遇到的问题
评论区中小鲸鱼uu私信我了一个问题,就是他串口输出乱码
为什么senddata不能发送int的数字,因为将数字转换成ASCII码输出了,至于ASCII码表百度一下吧

使用特权

评论回复
28
童雨竹| | 2024-2-17 08:26 | 只看该作者

会使二极管导通

使用特权

评论回复
29
Wordsworth| | 2024-2-17 09:29 | 只看该作者

对于电力电路来说串联的电阻起阻尼作用

使用特权

评论回复
30
Clyde011| | 2024-2-17 10:32 | 只看该作者

甚至会造成模块电源的损坏

使用特权

评论回复
31
公羊子丹| | 2024-2-17 11:25 | 只看该作者

将ESD静电保护二极管并联于电路中

使用特权

评论回复
32
万图| | 2024-2-17 12:28 | 只看该作者

电阻阻值大小则需根据元器件可承受电流大小而决定

使用特权

评论回复
33
Uriah| | 2024-2-17 13:31 | 只看该作者

小型电子设备

使用特权

评论回复
34
帛灿灿| | 2024-2-17 15:27 | 只看该作者

电阻元件的电阻值大小一般与温度,材料,长度,还有横截面积有关

使用特权

评论回复
35
Bblythe| | 2024-2-17 16:30 | 只看该作者

灌封之前需要使用抽空机进行天然脱泡和真空脱泡预处理

使用特权

评论回复
36
周半梅| | 2024-2-17 18:26 | 只看该作者

当电压超过二极管的导通电压的时候

使用特权

评论回复
37
Pulitzer| | 2024-2-17 19:29 | 只看该作者

在低成本控制器内部有时候会没有钳位二极管

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则