OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 1974|回复: 6

求助:串口控制不了灯的亮灭

[复制链接]

1

主题

4

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2018-8-2
在线时间
27 小时
发表于 2018-8-3 14:54:10 | 显示全部楼层 |阅读模式
#include "stm32f10x.h"

GPIO_InitTypeDef GPIO_LED_InitStructure;

GPIO_InitTypeDef GPIO_USART_TX_InitStructure;

GPIO_InitTypeDef GPIO_USART_RX_InitStructure;

USART_InitTypeDef USART_InitStructure;

int main()
{
       
        unsigned short int temp;
       
        // 配置时钟
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
       
        // 配置USART_TX
        GPIO_USART_TX_InitStructure.GPIO_Pin =  GPIO_Pin_9;
        GPIO_USART_TX_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_USART_TX_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
       
        GPIO_Init(GPIOA, &GPIO_USART_TX_InitStructure);
       
        // 配置USART_RX
        GPIO_USART_RX_InitStructure.GPIO_Pin =  GPIO_Pin_10;
        GPIO_USART_RX_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

        GPIO_Init(GPIOA, &GPIO_USART_RX_InitStructure);
       
        // 配置串口
        USART_InitStructure.USART_BaudRate = 115200;
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;
        USART_InitStructure.USART_StopBits = USART_StopBits_1;
        USART_InitStructure.USART_Parity = USART_Parity_No;
        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
       
        USART_Init(USART1, &USART_InitStructure);
       
        USART_Cmd(USART1, ENABLE);
       
        //配置灯
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
       
        GPIO_LED_InitStructure.GPIO_Pin = GPIO_Pin_5;
        GPIO_LED_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_LED_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
       
        GPIO_Init(GPIOB, &GPIO_LED_InitStructure);
       
        //关闭灯
        GPIO_SetBits(GPIOB, GPIO_Pin_5);
       
        while (1)
        {
                if(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) != RESET)
                {               
                        temp = USART_ReceiveData(USART1);
                        USART_SendData(USART1,temp);
                        GPIOB->ODR ^=GPIO_Pin_0;
                }

        }
}


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

8

主题

571

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2922
金钱
2922
注册时间
2016-5-13
在线时间
185 小时
发表于 2018-8-3 15:00:13 | 显示全部楼层
系统时钟什么的你都不配置,上来就直接配置串口啊。你还是先去看看原子哥哥写的工程。
比如下面的这两个函数,要先搞清楚这两个函数是干什么的。
        RCC_Configuration();
       
        NVIC_Configuration();
虽然不明白你们在说什么,但感觉很厉害的样子。
回复 支持 反对

使用道具 举报

2

主题

9

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2018-8-3
在线时间
10 小时
发表于 2018-8-3 15:07:36 | 显示全部楼层
//配置灯
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
        
        GPIO_LED_InitStructure.GPIO_Pin = GPIO_Pin_5;
        GPIO_LED_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_LED_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        
        GPIO_Init(GPIOB, &GPIO_LED_InitStructure);
        
        //关闭灯
        GPIO_SetBits(GPIOB, GPIO_Pin_5);
        
        while (1)
        {
                if(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) != RESET)
                {               
                        temp = USART_ReceiveData(USART1);
                        USART_SendData(USART1,temp);
                        GPIOB->ODR ^=GPIO_Pin_0;
                }

        }

既然你的LED引脚是GPIOB  pin5

为什么大循环轮巡的时候是 GPIOB->ODR ^=GPIO_Pin_0; ?
把GPIO_Pin_0  改成GPIO_Pin_5试试
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2018-8-2
在线时间
27 小时
 楼主| 发表于 2018-8-3 16:19:34 | 显示全部楼层
电脑小白 发表于 2018-8-3 15:00
系统时钟什么的你都不配置,上来就直接配置串口啊。你还是先去看看原子哥哥写的工程。
比如下面的这两个函 ...

这个是别人在一个CSON博客里面写的,我是想着借鉴别人先进的经验,我知道他这个这样是缺少东西的是不全的但是奇怪的是他当时用的串口控制LCD是可以控制的,所以我就改了一下我以为他既然可以控制LCD那应该也可以控制LED所以就试着改了一下,现在发现是自己粗心犯的错
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2018-8-2
在线时间
27 小时
 楼主| 发表于 2018-8-3 16:21:20 | 显示全部楼层
三等兵 发表于 2018-8-3 15:07
//配置灯
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
        

蟹蟹你惹,刚才才发现自己竟然忘记把程序给改全了。
回复 支持 反对

使用道具 举报

9

主题

796

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2038
金钱
2038
注册时间
2017-8-2
在线时间
522 小时
发表于 2018-8-3 16:24:02 | 显示全部楼层
回复 支持 反对

使用道具 举报

20

主题

227

帖子

0

精华

高级会员

Rank: 4

积分
605
金钱
605
注册时间
2017-7-14
在线时间
116 小时
发表于 2018-8-3 16:30:39 | 显示全部楼层
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-18 03:05

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表