• 串口、以及引脚重映射实例


      1 /*Include---------------------------*/
      2 #include"stm32f10x_lib.h"        //包含所有的头文件
      3 #include<stdio.h>
      4 
      5 //----------------函数声明--------------------
      6 void Delay_MS(u16 dly);
      7 void RCC_Configuration(void);
      8 void GPIO_Configuration(void);
      9 void USART3_Configuration(void);
     10 
     11 
     12 u8 tab[] = "hello welcome to class !";
     13 
     14 /*******************************************************************************
     15 * Function Name  : main
     16 * Description    : Main program.
     17 * Input          : None
     18 * Output         : None
     19 * Return         : None
     20 *******************************************************************************/ 
     21 int main(void)
     22 {
     23     u8 i ,id_num[12];;
     24     #ifdef DEBUG
     25     debug();
     26     #endif
     27     //------------初始化------------
     28     RCC_Configuration();
     29     GPIO_Configuration();    
     30     USART3_Configuration();
     31 
     32      id_num[0] = *((u8*)(0x1FFFF7E9));    //stm32芯片id的放置地址,96位id;12字节
     33      printf("hello world
    ");
     34     //------------向usart3发送数据-----------
     35     for(i=0;i<12;i++)
     36     {
     37         USART_SendData(USART3, tab[i]);
     38         id_num[i] = *((u8*)(0x1FFFF7E9+i));
     39         USART_SendData(USART3, id_num[i]);    //将id发送给串口
     40         Delay_MS(2000);
     41     //    while(USART_ GetFlagStatus(USART_FLAG_TC)==RESET)
     42     //        ;
     43     }
     44         
     45 }
     46 
     47 /*******************************************************************************
     48 * Function Name  : Delay_Ms
     49 * Description    : delay 1 ms.
     50 * Input          : dly (ms)
     51 * Output         : None
     52 * Return         : None
     53 *******************************************************************************/
     54 void Delay_MS(u16 dly)
     55 {
     56     u16 i,j;
     57     for(i=0;i<dly;i++)
     58         for(j=1000;j>0;j--);
     59 }
     60 
     61 /*******************************************************************************
     62 * Function Name  : RCC_Configuration
     63 * Description    : Configures the different system clocks.
     64 * Input          : None
     65 * Output         : None
     66 * Return         : None
     67 *******************************************************************************/
     68 void RCC_Configuration(void)
     69 {
     70     //----------使用外部RC晶振-----------
     71     RCC_DeInit();            //初始化为缺省值
     72     RCC_HSEConfig(RCC_HSE_ON);    //使能外部的高速时钟 
     73     while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET);    //等待外部高速时钟使能就绪
     74     
     75     FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);    //Enable Prefetch Buffer
     76     FLASH_SetLatency(FLASH_Latency_2);        //Flash 2 wait state
     77     
     78     RCC_HCLKConfig(RCC_SYSCLK_Div1);        //HCLK = SYSCLK
     79     RCC_PCLK2Config(RCC_HCLK_Div1);            //PCLK2 =  HCLK
     80     RCC_PCLK1Config(RCC_HCLK_Div2);            //PCLK1 = HCLK/2
     81     RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);    //PLLCLK = 8MHZ * 9 =72MHZ
     82     RCC_PLLCmd(ENABLE);            //Enable PLLCLK
     83 
     84     while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);    //Wait till PLLCLK is ready
     85     RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);    //Select PLL as system clock
     86     while(RCC_GetSYSCLKSource()!=0x08);        //Wait till PLL is used as system clock source
     87     
     88     //---------打开相应外设时钟--------------------
     89     RCC_APB2PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);    //使能APB2外设的GPIOC的时钟
     90     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE); //复用功能时钟开启             
     91 }
     92 
     93 /*******************************************************************************
     94 * Function Name  : GPIO_Configuration
     95 * Description    : 初始化GPIO外设
     96 * Input          : None
     97 * Output         : None
     98 * Return         : None
     99 *******************************************************************************/
    100 //由电路图可知;配置PC10,PC11引脚
    101 void GPIO_Configuration(void)
    102 {
    103     //CLK:PB5  CLR:PE11 DATA:PE10
    104     GPIO_InitTypeDef    GPIO_InitStructure;        //声明一个结构体变量
    105     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;     //选择PB.1-
    106     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     //管脚频率为50MHZ
    107     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;     //输出模式为 "复用推挽输出"
    108     GPIO_Init(GPIOC,&GPIO_InitStructure);                 //初始化GPIOB寄存器
    109     
    110     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 |GPIO_Pin_11 ;     //选择PE.10 PE.11
    111     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     //管脚频率为50MHZ
    112     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;     //输出模式为    "浮空输入"
    113     GPIO_Init(GPIOC,&GPIO_InitStructure);                 //初始化GPIOE寄存器
    114     
    115     //开启时钟    必须在RCC_Configuration中设置    
    116     
    117     
    118     //端口重映射:PC10/PC11
    119     GPIO_PinRemapConfig(GPIO_PartialRemap_USART3, ENABLE);    
    120 } 
    121 
    122 void USART3_Configuration(void)
    123 {
    124     USART_InitTypeDef USART_InitStructure;
    125     USART_InitStructure.USART_BaudRate = 9600;
    126     USART_InitStructure.USART_WordLength = USART_WordLength_8b;
    127     USART_InitStructure.USART_StopBits = USART_StopBits_1;
    128     USART_InitStructure.USART_Parity = USART_Parity_No;
    129     USART_InitStructure.USART_HardwareFlowControl =    USART_HardwareFlowControl_None;
    130     USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
    131 
    132     USART_Init(USART3, &USART_InitStructure);
    133 
    134     USART_Cmd(USART3, ENABLE);    //开启使能
    135 }
    136 
    137 /***********************************************************
    138  name:    fputc                                               *
    139  Description:重定向这个c库printf函数,文件流--->串口USART  *
    140                                                            *
    141 ************************************************************/
    142 int fputc(int ch,FILE *f)
    143 {
    144     //ch发送给USART1
    145     USART_SendData(USART3, ch);
    146     //等待发送完毕
    147     while(USART_GetFlagStatus(USART3, USART_FLAG_TC)==RESET)
    148         ;
    149     return ch;
    150 }
  • 相关阅读:
    SQL Server -使用表触发器记录表插入,更新,删除行数
    利用DataSet部分功能实现网站登录
    SQL Server排序的时候使null值排在最后
    大数据操作:删除和去重
    C#匿名类型序列化、反序列化
    Js调用asp.net后台代码
    C# Excel
    ajax的介绍
    MySQL数据库的知识总结
    ASP.NET MVC 入门系列教程
  • 原文地址:https://www.cnblogs.com/chris-cp/p/3916608.html
Copyright © 2020-2023  润新知