OpenEdv-开源电子网

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

新人求问关于串口和LED的GPIO设置问题

[复制链接]

4

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2012-11-7
在线时间
0 小时
发表于 2012-11-7 22:20:03 | 显示全部楼层 |阅读模式

用的库3.5
1. 我想让LED闪烁表明程序在运行不知道哪错了
2.为啥打开串口助手不能看到“welcome to my STM32”
下面附上程序
#include "stm32f10x.h"
#include "misc.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_exti.h"
#include "stm32f10x_usart.h"
#include "stm32f10x_flash.h"
#include <stdio.h>


void Delay(__IO uint32_t nCount)
{
 for(;nCount!=0;nCount--);
}

void RCC_Configuration(void)
{
    ErrorStatus HSEStartUpStatus;
    //使能外部晶振
 RCC_DeInit();
 //将RCC寄存器重新设置为默认值
    RCC_HSEConfig(RCC_HSE_ON);
    //等待外部晶振稳定
    HSEStartUpStatus = RCC_WaitForHSEStartUp();
    //如果外部晶振启动成功,则进行下一步操作
    if(HSEStartUpStatus==SUCCESS)
    {
        //设置HCLK(AHB时钟)=SYSCLK
        RCC_HCLKConfig(RCC_SYSCLK_Div1);
           //PCLK1(APB1) = HCLK/2
        RCC_PCLK1Config(RCC_HCLK_Div2);
           //PCLK2(APB2) = HCLK
        RCC_PCLK2Config(RCC_HCLK_Div1);
  //设置FLASH代码延时
        FLASH_SetLatency(FLASH_Latency_2);

        //使能预取指缓存
        FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

        //设置PLL时钟,为HSE的9倍频 8MHz * 9 = 72MHz

      RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
        //启动PLL
        RCC_PLLCmd(ENABLE);
        //等待PLL稳定
        while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
        //系统时钟SYSCLK来自PLL输出
        RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
        //切换时钟后等待系统时钟稳定
        while(RCC_GetSYSCLKSource()!=0x08); 
     }
   /* RCC system reset(for debug purpose) */
       
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD|RCC_APB2Periph_USART1|RCC_APB1Periph_USART2|RCC_APB2Periph_AFIO,ENABLE);
   //给GPIOA和重映射提供时钟,注意:一定要设置RCC_APB2Periph_AFIO

}

void GPIO_Configuration(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
//LED显示
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  GPIO_Init(GPIOA,&GPIO_InitStructure);
  GPIO_SetBits(GPIOA,GPIO_Pin_8);
 
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  GPIO_Init(GPIOD,&GPIO_InitStructure);
  GPIO_SetBits(GPIOD,GPIO_Pin_2);

//PA9作为US1的TX端,打开复用,负责发送数据
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  GPIO_Init(GPIOA,&GPIO_InitStructure);
//PA10作为US1的RX端,打开复用,负责接收数据
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  GPIO_Init(GPIOA,&GPIO_InitStructure);
}
void NVIC_Config(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;
 
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
  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);
}
void USART1_IRQHandler(void)
{
  char RX_dat;
  if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)
  {
    USART_ClearITPendingBit(USART1,USART_IT_RXNE);
 GPIO_WriteBit(GPIOA,GPIO_Pin_9,(BitAction)0x01);
 RX_dat=USART_ReceiveData(USART1)&0x7F;
 USART_SendData(USART1,RX_dat);
 while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET){};
  }  
}
void USART1_Config(void)
{
  USART_InitTypeDef USART_InitStructure;
  USART_ClockInitTypeDef USART_ClockInitStructure;

  USART_InitStructure.USART_BaudRate=9600;
  USART_InitStructure.USART_WordLength=USART_WordLength_8b;
  USART_InitStructure.USART_StopBits=USART_StopBits_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);

  USART_ClockInitStructure.USART_Clock = USART_Clock_Disable; // 时钟低电平活动 ;
  USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low;  // 时钟低电平 ;
  USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge; // 时钟第二个边沿进行数据捕获 ;
  USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable; // 最后一位数据的时钟脉冲不从SCLK输出 ;
  USART_ClockInit(USART1,&USART_ClockInitStructure);

  USART_Cmd(USART1,ENABLE);
  USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
  USART_ITConfig(USART1,USART_IT_TXE,ENABLE);
}

int main(void)

  unsigned char TxBuf1[]="welcome to my STM32";
  int i;
  RCC_Configuration();
  GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE);
  GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);
  GPIO_Configuration();
  USART1_Config();

  NVIC_Config();
  USART_ClearFlag(USART1,USART_FLAG_TC); 
  for(i=0;TxBuf1!='\0';i++)
  {
     USART_SendData(USART1,TxBuf1);
     GPIO_ResetBits(GPIOA,GPIO_Pin_8);
     GPIO_ResetBits(GPIOD,GPIO_Pin_2);
     while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET){};  
     GPIO_ResetBits(GPIOA,GPIO_Pin_8);
     GPIO_ResetBits(GPIOD,GPIO_Pin_2);
  }
 while(1)
    {
  GPIO_ResetBits(GPIOA,GPIO_Pin_8); 
         Delay(0xFFFFF);
  GPIO_SetBits(GPIOA,GPIO_Pin_8);
  Delay(0xFFFFF);
         GPIO_ResetBits(GPIOD,GPIO_Pin_2);
  Delay(0xFFFFF);
  GPIO_SetBits(GPIOD,GPIO_Pin_2);
  Delay(0xFFFFF); 
 } 
}

#ifdef USE_FULL_ASSERT
/**
* @brief Reports the name of the source file and the source line number
* where the assert_param error has occurred.
* @param file: pointer to the source file name
* @param line: assert_param error line source number
* @retval : None
*/

void assert_failed(uint8_t* file, uint32_t line)
{
/* User can add his own implementation to report the file name and line number,
ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
/* Infinite loop */
while (1)
{
}
}
#endif

main.c

5.84 KB, 下载次数: 30

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2012-11-7 22:24:26 | 显示全部楼层
参考我们的教程和代码即可。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-3-1 05:16

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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