求助,如何用STM32生成1MHz的方波
答案:1 悬赏:80 手机版
解决时间 2021-11-29 12:37
- 提问者网友:像風在裏
- 2021-11-29 09:36
求助,如何用STM32生成1MHz的方波
最佳答案
- 五星知识达人网友:孤独入客枕
- 2021-11-29 11:10
这个编译后就可以执行。
#include "stm32f10x.h"
void delay_us(u32 nus)
{
u32 temp;
SysTick->LOAD = 9*nus; //延时指定时间
SysTick->VAL = 0x00; //清空计数器
SysTick->CTRL = 0x01; //使能,减到零无动作,外部时钟源
do
{
temp=SysTick->CTRL; //读取当前倒计数值
}while((temp0x01)(!(temp(1<<16)))); //等待时间到达
SysTick->CTRL = 0x00; //关闭计数器
SysTick->VAL = 0x00; //清空计数器
}
void delay_ms(u32 nms)
{
u32 temp;
SysTick->LOAD = 9000*nms; //延时指定时间
SysTick->VAL = 0x00; //清空计数器
SysTick->CTRL = 0x01; //使能,减到零无动作,外部时钟源
do
{
temp=SysTick->CTRL; //读取当前倒计数值
}while((temp0x01)(!(temp(1<<16)))); //等待时间到达
SysTick->CTRL = 0x00; //关闭计数器
SysTick->VAL = 0x00; //清空计数器
}
int main(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA
|RCC_APB2Periph_GPIOB,ENABLE);//使能 PA,PB 端口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //LED0->PA.8 端口配置,发光指示
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO 口速度为 50MHz
GPIO_Init(GPIOA,GPIO_InitStructure); //根据设定参数初始化 GPIOA.8
GPIO_SetBits(GPIOA,GPIO_Pin_8); //PA.8 输出高
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //LED1->PB.9 端口配置, 推挽输出方波
GPIO_Init(GPIOB,GPIO_InitStructure); //推挽输出,IO 口速度为 50MHz
GPIO_SetBits(GPIOB,GPIO_Pin_9); //PB.9 输出高
while(1)
{
GPIO_ResetBits(GPIOA,GPIO_Pin_8);
GPIO_SetBits(GPIOB,GPIO_Pin_9);
delay_us(500);
GPIO_SetBits(GPIOA,GPIO_Pin_8);
GPIO_ResetBits(GPIOB,GPIO_Pin_9);
delay_us(500);
}
}
#include "stm32f10x.h"
void delay_us(u32 nus)
{
u32 temp;
SysTick->LOAD = 9*nus; //延时指定时间
SysTick->VAL = 0x00; //清空计数器
SysTick->CTRL = 0x01; //使能,减到零无动作,外部时钟源
do
{
temp=SysTick->CTRL; //读取当前倒计数值
}while((temp0x01)(!(temp(1<<16)))); //等待时间到达
SysTick->CTRL = 0x00; //关闭计数器
SysTick->VAL = 0x00; //清空计数器
}
void delay_ms(u32 nms)
{
u32 temp;
SysTick->LOAD = 9000*nms; //延时指定时间
SysTick->VAL = 0x00; //清空计数器
SysTick->CTRL = 0x01; //使能,减到零无动作,外部时钟源
do
{
temp=SysTick->CTRL; //读取当前倒计数值
}while((temp0x01)(!(temp(1<<16)))); //等待时间到达
SysTick->CTRL = 0x00; //关闭计数器
SysTick->VAL = 0x00; //清空计数器
}
int main(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA
|RCC_APB2Periph_GPIOB,ENABLE);//使能 PA,PB 端口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //LED0->PA.8 端口配置,发光指示
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO 口速度为 50MHz
GPIO_Init(GPIOA,GPIO_InitStructure); //根据设定参数初始化 GPIOA.8
GPIO_SetBits(GPIOA,GPIO_Pin_8); //PA.8 输出高
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //LED1->PB.9 端口配置, 推挽输出方波
GPIO_Init(GPIOB,GPIO_InitStructure); //推挽输出,IO 口速度为 50MHz
GPIO_SetBits(GPIOB,GPIO_Pin_9); //PB.9 输出高
while(1)
{
GPIO_ResetBits(GPIOA,GPIO_Pin_8);
GPIO_SetBits(GPIOB,GPIO_Pin_9);
delay_us(500);
GPIO_SetBits(GPIOA,GPIO_Pin_8);
GPIO_ResetBits(GPIOB,GPIO_Pin_9);
delay_us(500);
}
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯