OpenEdv-开源电子网

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

STM32F103C8 串口2

[复制链接]

1

主题

3

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2017-7-20
在线时间
3 小时
发表于 2018-10-19 16:53:18 | 显示全部楼层 |阅读模式
1金钱
用STM32F103C8,没有使用外部晶振,将SystemInit()改成64M        __IO uint32_t StartUpCounter = 0, HSEStatus = 0;
   RCC_DeInit();

  /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/
  /* Enable HSI */
   RCC->CR |= ((uint32_t)RCC_CR_HSION);

/* Wait till HSI is ready and if Time out is reached exit */
  do
  { HSEStatus = RCC->CR & RCC_CR_HSIRDY;
    StartUpCounter++;
  } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));
if ((RCC->CR & RCC_CR_HSIRDY) != RESET)
  {
     HSEStatus = (uint32_t)0x01;
  }
  else
  {
    HSEStatus = (uint32_t)0x00;
  }
  if (HSEStatus == (uint32_t)0x01)
  {
    /* Enable Prefetch Buffer */
    FLASH->ACR |= FLASH_ACR_PRFTBE;
    /* Flash 2 wait state */
    FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY);
    FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_2;
    /* HCLK = SYSCLK */
   RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;

   /* PCLK2 = HCLK */
    RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;

    /* PCLK1 = HCLK */
    RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;

   /*? PLL configuration: PLLCLK = HSI/2 *?16 =?64 MHz */
    RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL));
   RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSI_Div2| RCC_CFGR_PLLMULL16);

    /* Enable PLL */
    RCC->CR |= RCC_CR_PLLON;
    /* Wait till PLL is ready */
    while((RCC->CR & RCC_CR_PLLRDY) == 0)
    {
    }

   /* Select PLL as system clock source */
    RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
    RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;
   /* Wait till PLL is used as system clock source */
while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08)
  {
    }
  }
  else
  {
  }

}


然后用例程的串口通信,改成PA2,PA3,使用USART2,串口发送都是乱码,求解
#include "stm32f10x.h"
void My_USART2_Init(void)
{
        GPIO_InitTypeDef GPIO_InitStrue;
        USART_InitTypeDef USART_InitStrue;
        NVIC_InitTypeDef NVIC_InitStrue;
         RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO,ENABLE);//①
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);
       
        GPIO_InitStrue.GPIO_Mode=GPIO_Mode_AF_PP;
        GPIO_InitStrue.GPIO_Pin=GPIO_Pin_2;
        GPIO_InitStrue.GPIO_Speed=GPIO_Speed_50MHz;
  GPIO_Init(GPIOA,&GPIO_InitStrue);//②
       
        GPIO_InitStrue.GPIO_Mode=GPIO_Mode_IN_FLOATING;
        GPIO_InitStrue.GPIO_Pin=GPIO_Pin_3;
        GPIO_InitStrue.GPIO_Speed=GPIO_Speed_50MHz;
  GPIO_Init(GPIOA,&GPIO_InitStrue);//②
       

        USART_InitStrue.USART_BaudRate=115200;
        USART_InitStrue.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
        USART_InitStrue.USART_Mode=USART_Mode_Tx|USART_Mode_Rx;
        USART_InitStrue.USART_Parity=USART_Parity_No;
        USART_InitStrue.USART_StopBits=USART_StopBits_1;
        USART_InitStrue.USART_WordLength=USART_WordLength_8b;
       
        USART_Init(USART2,&USART_InitStrue);//③
       
        USART_Cmd(USART2,ENABLE);//使能串口2
       
        USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);//开启接收中断
       
        NVIC_InitStrue.NVIC_IRQChannel=USART2_IRQn;
        NVIC_InitStrue.NVIC_IRQChannelCmd=ENABLE;
        NVIC_InitStrue.NVIC_IRQChannelPreemptionPriority=1;
        NVIC_InitStrue.NVIC_IRQChannelSubPriority=1;
        NVIC_Init(&NVIC_InitStrue);
       
       

}

void USART2_IRQHandler(void)
{
        u8 res;
         if(USART_GetITStatus(USART2,USART_IT_RXNE))
{
     res= USART_ReceiveData(USART2);
     USART_SendData(USART2,res);   
  }
}

int main(void)
{       
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
        My_USART2_Init();
         while(1);
         
}



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

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2017-7-20
在线时间
3 小时
 楼主| 发表于 2018-10-19 17:26:23 | 显示全部楼层
是不是我说的不清楚,就是将时钟改成64M后,使用串口2,调试助手都是乱码,用的例程改的 求助
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-10-22 02:55:51 | 显示全部楼层
应该是你的频率修改不对
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2017-7-20
在线时间
3 小时
 楼主| 发表于 2018-10-22 10:09:03 | 显示全部楼层
正点原子 发表于 2018-10-22 02:55
应该是你的频率修改不对

请问下,是时钟的频率修改的不对么,那应该怎么修改啊
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-21 10:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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