stm32入门实验代码编写步骤整理

前提

1.该笔记为本人学习时做的一些笔记,仅为个人学习只用,可能存在错误或缺陷
2.本人是在 正点原子 平台学习,具有大量视频,讲解清楚

一、GPIO 的操作步骤

1) 使能 IO 口时钟

调用函数为 RCC_APB2PeriphClockCmd()。
2) 初始化 IO 参数。

调用函数 GPIO_Init();
3) 操作 IO。

GPIO_SetBits()、GPIO_ResetBits ()等

二、串口usart

**1) 串口时钟使能,GPIO 时钟使能;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA,ENABLE);
2) 串口复位;

USART_DeInit(USART1);(一般不用)
3) GPIO 端口模式设置

GPIO_Init();
4) 串口参数初始化;

USART_Init();
5) 开启中断并且初始化 NVIC(如果需要开启中断才需要这个步骤);

接收中断:USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);

发送结束中断:USART_ITConfig(USART1,USART_IT_TC,ENABLE);
6) 使能串口;

USART_Cmd(USART1, ENABLE);
7) 编写中断处理函数;

void USART1_IRQHandler(void) { };

接收:USART_ReceiveData(USART1);

发送: USART_SendData(USART1,res);

三、外部中断

**1)初始化 IO 口为输入。

GPIO_Init();//设置为输入
2)开启 AFIO 时钟。

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
3)设置 IO 口与中断线的映射关系。

GPIO_EXTILineConfig(GPIO_PortSourceGPIOx,GPIO_PinSourcex);
4)初始化线上中断,设置触发条件等。

EXTI_Init();
5)配置中断分组(NVIC),并使能中断。

中断优先级分组:NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);初始化NVIC: NVIC_Init();
6)编写中断服务函数。

void EXTI3_IRQHandler(void){ }

四、独立看门狗

1)取消寄存器 写保护 (向 向 IWDG_KR 写入 0X5555);

IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);

2) 设置独立看门狗的 预 分频系数和重装载值;

IWDG_SetPrescaler(uint8_t IWDG_Prescaler); //设置 IWDG 预分频值

IWDG_SetReload(uint16_t Reload); //设置 IWDG 重装载值

3) 重载计数值 喂狗 (向 向 IWDG_KR 写入 0XAAAA );

IWDG_ReloadCounter(); //按照 IWDG 重装载寄存器的值重装载 IWDG 计数器

4) 启动看门狗(向 向 IWDG_KR 写入 0XCCCC);

IWDG_Enable(); //使能 IWDG

五、窗口看门狗

1) 能 使能 WWDG 时钟;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE); // WWDG 时钟使能

2) 设置窗口值和分频数;

void WWDG_SetWindowValue(uint8_t WindowValue);//设置看门狗的上窗口值

void WWDG_SetPrescaler(uint32_t WWDG_Prescaler); //分频值

3) )启 开启 WWDG 中断并分组;

WWDG_EnableIT(); //开启窗口看门狗中断

4 ) 设置计数器初始值并 设置计数器初始值并;

void WWDG_Enable(uint8_t Counter);

5 ) 编写中断服务函数;

六、定时器中断

1 )TIM3 时钟使能。

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能

2) 初始化定时器参数 数, 设置 自动重装值 , 分频系数 ,计数方式 等。

TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitSture); //初始化定时器参数

3) 设置 TIM3_DIER 允许更新中断。

TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE );

4 )TIM3 中断 优先级。

NVIC_Init();

5) 许 允许 TIM3 工作能 ,也就是使能 TIM3 。

TIM_Cmd(TIM3, ENABLE); //使能 TIMx 外设

6) 编写中断服务函数。

void TIM3_IRQHandler(void){ }

七、PWM

1) 开启 TIM3 时钟 以及复用功能时钟置 ,配置 PB5 为复用输出。

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //使能定时器 3 时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOA, ENABLE); //复用时钟使能

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出

2)设置 TIM3_CH2 重映射到 PB5 上。

GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE);

3) 初始化 TIM3, 设置 TIM3 的 的 ARR 和 PSC。

TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据指定的参数初始化 TIMx 的

4) 设置 TIM3_CH2 的 的 PWM 模式能 ,使能 TIM3 的 CH2 输出。

TIM_OC2Init(TIM3, &TIM_OCInitStructure); //初始化 TIM3 OC2 通道二

5) 使能 TIM3 。

TIM_Cmd(TIM3, ENABLE); //使能 TIM3

6)修改 TIM3_CCR2 来控制占空比。

TIM_SetCompare2(TIM_TypeDef* TIMx, uint16_t Compare2); // 修改ccr2的值

八、输入捕获

1 )开启 TIM5 时钟和 和 GPIOA 时钟 ,置 配置 PA0 为下拉输入。

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE); //使能 TIM5 时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能 GPIOA 时钟

设置PA5的模式为下拉输入

2) 初始化 TIM5, 设置 TIM5 的 的 ARR 和 PSC 。

TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure); //根据指定的参数初始化 Tim5

3 )设置 TIM5 的输入比较参数,开启输入捕获

TIM_ICInit(TIM5, &TIM5_ICInitStructure);

4 )使能捕获和更新中断置 (设置 TIM5 的 DIER 寄存器)

TIM_ITConfig( TIM5,TIM_IT_Update|TIM_IT_CC1,ENABLE);//允许更新中断和捕获中断

5)使能定时器置 (设置 TIM5 的 的 CR1 寄存器)

TIM_Cmd(TIM5,ENABLE ); //使能定时器 5

6 )设置中断分组,

NVIC_Init();

7)编写中断服务函数

九、ADC

1)启 开启 PA 口时钟和 和 ADC1 时钟置 ,设置 PA1 为模拟输入。

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_ADC1,ENABLE); //使能ADC和GPIOA外设时钟

GPIO_InitTypStru.GPIO_Mode=GPIO_Mode_AIN; //将是同ADC通道设置为模拟输入

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oGXaIeCN-1609641807177)(C:\Users\18264\AppData\Roaming\Typora\typora-user-images\image-20201004151059331.png)]

2)位 复位 ADC1 ,同时置 设置 ADC1 分频因子。

RCC_ADCCLKConfig(RCC_PCLK2_Div6); //设置ADC分频因子

ADC_DeInit(ADC1); //ADC时钟复位

3)化 初始化 ADC1 参数,置 设置 ADC1 的工作模式 以及规则序列的相关信息

ADC_Init(ADC1, &ADC_InitStructure); //根据指定的参数初始化外设 ADCx

4)使能 ADC 并校准。

ADC_Cmd(ADC1, ENABLE); //使能指定的 ADC1

ADC_ResetCalibration(ADC1);

while(ADC_GetResetCalibrationStatus(ADC1)); //等待复位校准结束

ADC_StartCalibration(ADC1); //开始指定 ADC1 的校准状态

while(ADC_GetCalibrationStatus(ADC1)); //等待校 AD 准结束

5) 读取 ADC 值。

ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 );

ADC_SoftwareStartConvCmd(ADC1, ENABLE);//使能指定的 ADC1 的软件转换启动功能

while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换结束

ADC_GetConversionValue(ADC1); 转换值

读取 ADC 值。**

ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 );

ADC_SoftwareStartConvCmd(ADC1, ENABLE);//使能指定的 ADC1 的软件转换启动功能

while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换结束

ADC_GetConversionValue(ADC1); 转换值

  • 10
    点赞
  • 97
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值