STM32学习笔记_第1页
STM32学习笔记_第2页
STM32学习笔记_第3页
STM32学习笔记_第4页
STM32学习笔记_第5页
已阅读5页,还剩5页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、一、GPIO 基本功能的使用:GPIO 功能文件相关操作:1. 使用 GPIO 功能前,首先要初始化系统,最简单的方法为:添加stm32f10x_rcc.c ,打开stm32f10x_conf.h 在第 41 行将 /* #include stm32f10x_rcc.h*/ 两边注释符去掉, 在 main 函数中添加代码 SystemInit();2. 添加 stm32f10x_gpio.c3. 打开 stm32f10x_conf.h 在 37 行将 /*#include stm32f10x_gpio.h*/ 两边注释符去掉GPIO 口使能:1. 定义一个初始化类型结构体变量,我们为这个结构体

2、里的各个变量赋值,GPIO_InitTypeDef GPIO_InitStructure;2. 开启 GPIO 时钟,只有开启了 GPIO 时钟,对应端口才可以正常工作, GPIO 口对应时钟 APB2RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);3. 为结构体赋值设置 GPIO 口为输出GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;/设置引脚GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;/通用推挽输出,其它选项GPIO_InitStructure.

3、GPIO_Speed = GPIO_Speed_50MHz;/输出最大频率 ,其它选项设置 GPIO 口为输入GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;/设置引脚GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;/ 悬空输 附:GPIO_Mode 值GPIO_Mode_AIN 模拟输入 GPIO_Mode_IN_FLOATING 浮空输入 GPIO_Mode_IPD 下拉输入 GPIO_Mode_IPU 上拉输入 GPIO_Mode_Out_OD 开漏输出 GPIO_Mode_Out_PP 推挽输出

4、 GPIO_Mode_AF_OD 复用开漏输出 GPIO_Mode_AF_PP 复用推挽输出GPIO_Speed 值GPIO_Speed_10MHz 最高输出速率 10MHz GPIO_Speed_2MHz 最高输出速率 2MHzGPIO_Speed_50MHz 最高输出速率 50MHz4. 使能 GPIO 口GPIO_Init(GPIOA, &GPIO_InitStructure);例:void GPIOA0_Init(void)GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, E

5、NABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA, &GPIO

6、_InitStructure);GPIO 使用:输出状态:GPIO 口置高: GPIO_SetBits(GPIOA,GPIO_Pin_0| GPIO_Pin_1);GPIO 口置底: GPIO_ResetBits(GPIOA,GPIO_Pin_0);_SET);写数据到 GPIO 的某个引脚: GPIO_WriteBit(GPIOA, GPIO_Pin_15, Bit 写数据到 GPIO : GPIO_Write(GPIOA, 0x1101);得到 GPIO 口状态: GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_0)u16 ReadValue;ReadValu

7、e = GPIO_ReadOutputData(GPIOC);例:#define LED0_OFF GPIO_ResetBits(GPIOA,GPIO_Pin_0)#define LED0_ON GPIO_SetBits(GPIOA,GPIO_Pin_0)#define LED0 GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_0)int main(void)while(1)delay();if(LED1)LED0_OFF;else LED0_ON;输入状态:得到 GPIO 口状态: GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3)u

8、16 ReadValue;ReadValue = GPIO_ReadInputData(GPIOC);二、USART 串口基本功能实现添加 stm32f10x_rcc.c stm32f10x_gpio.c stm32f10x_usart.c 打开 stm32f10x_conf.h 在 37 行将 /*#include stm32f10x_gpio.h*/41 行 /* #include stm32f10x_rcc.h*/ 46 行 /*#include stm32f10x_usart.h*/ 两边注释符去掉USART 串口配置1. Gpio 引脚配置,将 USART 的 TX 口配置为输出,

9、RX 配置为浮空输入2. 配置时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);3. 配置 usartUSART_InitTypeDef USART_InitStructure;USART_InitStructure.USART_BaudRateUSART_InitStructure.USART_WordLengthUSART_InitStructure.USART_StopBitsUSART_InitStructure.USART_Parity= 115200;/ 波特率 115200= USART_WordLength_8b;

10、 /8 位数据 = USART_StopBits_1; /停止位 1 位= 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);4. 配置中断,可以跳过USART_ITConfig(USART1, USART_IT_RXNE, ENABLE)

11、;5. 打开串口 USART_Cmd(USART1, ENABLE);例:void COM_Init(void)GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1 , ENABLE);/* 配置 USART1 Tx (PA9) */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_M

12、ode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);/输出最大频率为 50MHz/* 配置 USART1 Rx (PA10) */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;/浮空输入模式GPIO_Init(GPIOA, &GPIO_InitStructure);USART_InitS

13、tructure.USART_BaudRateUSART_InitStructure.USART_WordLength 据USART_InitStructure.USART_StopBits 位USART_InitStructure.USART_Parity= 115200;/ 波特率 115200= USART_WordLength_8b; /8 位数 = USART_StopBits_1;/ 停止位 1= USART_Parity_No ;/ 无USART_InitStructure.USART_HardwareFlowControlUSART_InitStructure.USART_Mo

14、deUSART_Init(USART1, &USART_InitStructure);= USART_Mode_Rx | USART_Mode_Tx;USART_HardwareFlowControl_None;USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);USART_Cmd(USART1, ENABLE); USART 串口使用1. 发送字符USART_SendData(USART1, 1); / 往串口 1 发送字符 1while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) = RESET);/ 等

15、待发送结 束2. 接收字符unsigned char a;if(USART_GetFlagStatus(USART1, USART_IT_RXNE)=RESET)/ 有数据来 while(USART_GetFlagStatus(USART1, USART_IT_RXNE)=RESET) ;/ 等待接收 完成a=USART_ReceiveData(USART1);/ 接收数据 例: unsigned char ch;if(USART_GetFlagStatus(USART1, USART_IT_RXNE)=RESET)/ 有数据来(在中断 中,可去掉)while(USART_GetFlagSta

16、tus(USART1, USART_IT_RXNE)=RESET);/ 等待接 收完成 ;ch=USART_ReceiveData(USART1);/ 接收数据delay(10);/不加延时 会产生堵塞USART_SendData(USART1, ch); / 往串口 1 发送字符 1while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) = RESET);3 C 标准输出函数 Printf 的使用:包含头文件 #include /包含标准 c 库的输入输出头文件添加函数int fputc(int ch, FILE *f)USART_SendDat

17、a(USART1, (unsigned char) ch);while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) = RESET) ; return ch;然后就可以在程序中调用 printf ()了4. 串口中断处理函数在项目中添加 misc.c 文件,找到 stm32f10x_conf.h 文件的第 48 行 /*#include misc.h*/ 去掉两边的注释符配置中断优先级例:NVIC_InitTypeDef NVIC_InitStructure;/定义数据结构体NVIC_SetVectorTable(NVIC_VectTab_FLAS

18、H, 0x0);/ 将中断矢量放到 Flash 的 0 地址NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);/ 设置优先级配置的模式, 详情请阅 读原材料中的文章/使能串口中断,并设置优先级 NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVI

19、C_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure);/ 将结构体丢到配置函数,即写入到对应寄存器中打开串口中断( USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); 串口接受中断) 找到 stm32f10x_it.c 中 USART 的中断子函数如 void USART1_IRQHandler(void) ; 也可以将此函数移动到其它文件下。在函数中添加相应代码。例:void USART1_IRQHandler(void)unsigned char a,b,c;if(USART_GetITS

20、tatus(USART1, USART_IT_RXNE) != RESET)/ 中断来while(USART_GetFlagStatus(USART1, USART_IT_RXNE)=RESET);/等待接收完成a=USART_ReceiveData(USART1);if(a=a) while(USART_GetFlagStatus(USART1, USART_IT_RXNE)=RESET);/ 等待接收完 成b=USART_ReceiveData(USART1);/ 接收数据if(b=0)GPIO_SetBits(GPIOA,GPIO_Pin_0);else GPIO_ResetBits(G

21、PIOA,GPIO_Pin_0);while(USART_GetFlagStatus(USART1, USART_IT_RXNE)=RESET);/ 等待接收完 成c=USART_ReceiveData(USART1);/ 接收数据if(c=1) GPIO_SetBits(GPIOA,GPIO_Pin_1);else GPIO_ResetBits(GPIOA,GPIO_Pin_1);三、通用定时器 TIMx 功能实现添加 stm32f10x_tim.c 打开 stm32f10x_conf.h 文件,将 45 行/*#include stm32f10x_tim.h*/ 两 边注释符去掉基本定时功

22、能实现1. 配置 RCC ,使能 TIMxRCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);2. 配置 NVIC ,设置优先级等NVIC_InitTypeDef NVIC_InitStructure;NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;NVIC_InitStructure.

23、NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure);3. 配置 TIMxTIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;/设置计数器溢出周期(周期系数 -1 )TIM_TimeBaseStructure.TIM_Period = 35999;/设置分频系数(分频系数 -1 ) TIM_TimeBaseStructure.TIM_Prescaler = 1999;/设置计数方向TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode

24、_Up;TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);/使能定时器中断TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);/使能定时器 TIM_Cmd(TIM2, ENABLE);4. 写中断钩子函数 ( 或称为中断服务函数, 在文件 stm32f10x_it.c 中,也可在其它文件中创建 ) void TIM2_IRQHandler(void)if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)TIM_ClearITPendingBit(TIM2, TIM_IT_Update);/input your code例:用 TIM 定时器功能输出周期为 20ms 占峰比 50%pwm 信号 设置定时器 2 的定时周期为 10um定义全局变量 num预定义#define GPIO0_OFF GPIO_ResetBits(GPIOA,GPIO_Pin_0)#define GPIO0_ON GPIO_SetBits(GPIOA,GPIO_Pin_0)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论