STM32通过调用库函数进行编程
来源:互联网 发布:数据归一化方法 编辑:程序博客网 时间:2024/06/08 13:11
1、调用库函数编程和直接配置寄存器编程的区别:
2、CMSIS标准:
3、STM32库函数的组织:
4、程序例举:
调用库函数实现通过USART发送数据(26个大写的英文字母)
首先:在主函数部分先要(调用自己编写的函数)对USART要用到的I/O端口进行配置、打开系统时钟配置和对USART1进行参数配置
下图是通过调用库函数对USART1的参数进行配置,将其配置成异步收发模式、波特率用户可以自定的串口:
/************************************************************************************************** *硬件平台:STM32F103VC *学习重点:调用库函数来实现对USART的操作 *实现功能:软件仿真,实现STM32通过USART1发送数据 *作 者:赵小龙 **************************************************************************************************//* Includes ------------------------------------------------------------------*/#include "stm32f10x_lib.h" //包含了所有的头文件 它是唯一一个用户需要包括在自己应用中的文件,起到应用和库之间界面的作用。#include "stm32f10x_map.h"/*----------------函数声明部分---------------*/void delay1ms(int t) ;void RCC_Configuration(void) ;void GPIO_Configuration(void) ;void USART_Configuration(u32 BaudRate) ;/* Private functions -----------------------------------------------------------------------------*/ /*************************************************************************************************** Function Name : main* Description : 软件仿真,从USART1发送26个大写的英文字母* Input : None* Output : None* Return : None****************************************************************************************************/int main(void){u8 i,data;/*--------配置开启系统时钟、配置USART1发送/接收使用的两个I/O口、配置USART1---------------------------------------------*/RCC_Configuration();GPIO_Configuration();USART_Configuration(19600);/*--------发送一串字符‘A’--‘Z’到USART1的DR-----------------------------------------------------------------------------*/data='A';for(i=0;i<26;i++){USART_SendData(USART1, data) ;data++ ;while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET) ;//发送完成标志位为1时便是数据发送完毕,若为0时则应让程序等待(等待数据发送发送完成)/*注意:这里最好不要按照以下形式书写,否则会出错,具体原因我暂且还不知道u8 status ; status = USART_GetFlagStatus(USART1, USART_FLAG_TC) ; //将查看状态寄存器的函数的返回值赋值给变量status while(status == RESET) ;*/}}/******************************************************************************** Function Name : Delay_Ms* Description : delay 1 ms.* Input : dly (ms)* Output : None* Return : None*******************************************************************************/void delay1ms(int t){//机器周期T = 1/(72000000/12)s = 1/6000000 s = 1/6 usint temp = 6000/4 ;while(t--){while(temp--){ ; }}}/******************************************************************************** Function Name : RCC_Configuration* Description : Configures the different system clocks.* Input : None* Output : None* Return : None*******************************************************************************/void RCC_Configuration(void){//----------使用外部RC晶振-----------RCC_DeInit();//初始化为缺省值RCC_HSEConfig(RCC_HSE_ON);//使能外部的高速时钟 while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET);//等待外部高速时钟使能就绪//FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);//Enable Prefetch Buffer//FLASH_SetLatency(FLASH_Latency_2);//Flash 2 wait stateRCC_HCLKConfig(RCC_SYSCLK_Div1);//HCLK = SYSCLKRCC_PCLK2Config(RCC_HCLK_Div1);//PCLK2 = HCLKRCC_PCLK1Config(RCC_HCLK_Div2);//PCLK1 = HCLK/2RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);//PLLCLK = 8MHZ * 9 =72MHZRCC_PLLCmd(ENABLE);//Enable PLLCLKwhile(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);//Wait till PLLCLK is ready RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//Select PLL as system clockwhile(RCC_GetSYSCLKSource()!=0x08);//Wait till PLL is used as system clock source//---------打开相应外设时钟--------------------RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能APB2外设的GPIOA的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//使能APB2外设的GPIOC的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE); }/******************************************************************************** Function Name : GPIO_Configuration* Description : 初始化GPIO外设* Input : None* Output : None* Return : None*******************************************************************************/ void GPIO_Configuration(void){ GPIO_InitTypeDef GPIO_InitStructure; /* Configure USARTx_Tx as alternate function push-pull */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); /* Configure USARTx_Rx as input floating */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure);}/******************************************************************************** Function Name : USART_Configuration* Description : 初始化串口USART1(异步收发模式)* Input : BaudRate (要设置的波特率)* Output : None* Return : None*******************************************************************************/ void USART_Configuration(u32 BaudRate){//1、定义一个用于初始化USART的结构体USART_InitTypeDef USART_InitStructure; //2、给结构体元素赋值,设置 波特率、数据帧的位数、停止位的位数、奇偶校验位、硬件流控制位、USART模式(发送、接收)USART_InitStructure.USART_BaudRate = BaudRate; 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_Tx | USART_Mode_Rx; //3、调用函数USART_Init();用上面的结构体值作为参数对USART1进行初始化USART_Init(USART1, &USART_InitStructure);//4、调用函数USART_Cmd();对USART1进行使能USART_Cmd(USART1, ENABLE);}
程序运行后:
1 0
- STM32通过调用库函数进行编程
- 文件编程(库函数调用)
- Linux下通过系统调用(API)和C语言库函数对文件进行访问
- Linux下通过系统调用(API)和C语言库函数对文件进行访问
- Linux下通过系统调用(API)和C语言库函数对文件进行访问
- Linux下通过系统调用(API)和C语言库函数对文件进行访问
- Linux下通过系统调用(API)和C语言库函数对文件进行访问
- STM32库函数编程学习心得:assert_param的应用
- 文件编程之库函数调用
- 5.LCD驱动调用方法以及按键函数编写—基于CT117E开发板的STM32库函数编程
- 调用库函数进行的qsort快速排序
- 【库函数】简要举例STM32对GPIO进行SetBits和ResetBits
- STM32:STM32库函数配置
- STM32 学习八 USART通信3 库函数方式编程
- 基于stm32的热释传感器模块(库函数编程)
- 2-9 库函数调用方式文件编程
- stm32 Flash读写[库函数]
- stm32库函数FSMC_NORSRAMInit()解析
- jquery操作select小结
- 绑定类别的方法
- vmare 虚拟机安装xp错误output error file to the following location A:\GHOSTERR.TXT
- 为什么需要auto_ptr_ref
- io表
- STM32通过调用库函数进行编程
- linux的input子系统(五)
- NYOJ290-动物统计加强版
- jdbc总结
- 我在兰亭这三年之开展自动化
- 通过Spring快速创建RMI应用
- JAVA网络编程-----TCP通信
- 矩阵类的实现
- NYOJ771,密钥解密