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

STM32串口数据收发 相关配置+点灯控制

[复制链接]
楼主: 4c1l
手机看帖
扫描二维码
随时随地手机跟帖
21
4c1l|  楼主 | 2023-10-11 15:46 | 只看该作者 回帖奖励 |倒序浏览
led.c
#include "stm32f10x.h"
#include "led.h"

void Led_init(void)
{
        GPIO_InitTypeDef Led_init;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
       
        Led_init.GPIO_Mode         = GPIO_Mode_Out_PP;
        Led_init.GPIO_Pin = GPIO_Pin_13;
        Led_init.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOC, &Led_init);
}


使用特权

评论回复
22
4c1l|  楼主 | 2023-10-11 15:46 | 只看该作者
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);

使用特权

评论回复
23
4c1l|  楼主 | 2023-10-11 15:47 | 只看该作者
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);
       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
       
        //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);
       
        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);
}


使用特权

评论回复
24
4c1l|  楼主 | 2023-10-11 15:47 | 只看该作者
main.c
#include "stm32f10x.h"
#include "led.h"
#include "relay.h"
#include "exti.h"
#include "usart.h"
#include "stdio.h"

int main()
{
        Led_init();
        Relay_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");
                }
        }
}
       

使用特权

评论回复
25
Stahan| | 2023-10-11 19:20 | 只看该作者
这么多配置文件吗

使用特权

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

本版积分规则