[stm32] stm32f103c8t6 mini的blink程序

本文详细介绍了STM32F10X微控制器的GPIO配置与控制,包括如何设置GPIO为推挽输出,以及如何使用SysTick定时器实现精确的延时函数。同时,提供了完整的代码示例,演示了如何控制GPIO引脚进行闪烁操作。

一、主板的连接

1、TXD接口,接入A10

2、RXD接口,接入A9

其中A10,A9默认是通信位。

3、初始设置

BOOT0为1,BOOT1为0

二、软件设置

1、设置 DTR高电平、RTS高电平

2、端口号和波特率设置

三、程序代码

#include "stm32f10x.h"


/*******************************************************************************
* 函 数 名         : delay_us
* 函数功能           : 延时函数,延时us
* 输    入         : i
* 输    出         : 无
注意:以上两函数中间的参数u32 i不能超过1800,举例,想定时一分钟,可以通过for循环让delay_ms(1000)走60次,而不能使用delay_ms(60000),不然程序就出错了。
https://www.cnblogs.com/jiwangbujiu/p/5463751.html
*******************************************************************************/
void delay_us(u32 i)
{
    u32 temp;
    SysTick->LOAD=9*i;         //设置重装数值, 72MHZ时
    SysTick->CTRL=0X01;         //使能,减到零是无动作,采用外部时钟源
    SysTick->VAL=0;                //清零计数器
    do
    {
        temp=SysTick->CTRL;           //读取当前倒计数值
    }
    while((temp&0x01)&&(!(temp&(1<<16))));     //等待时间到达
    SysTick->CTRL=0;    //关闭计数器
    SysTick->VAL=0;        //清空计数器
}

/*******************************************************************************
* 函 数 名         : delay_ms
* 函数功能           : 延时函数,延时ms
* 输    入         : i
* 输    出         : 无
注意:以上两函数中间的参数u32 i不能超过1800,举例,想定时一分钟,可以通过for循环让delay_ms(1000)走60次,而不能使用delay_ms(60000),不然程序就出错了。
*******************************************************************************/
void delay_ms(u32 i)
{
    u32 temp;
    SysTick->LOAD=9000*i;      //设置重装数值, 72MHZ时
    SysTick->CTRL=0X01;        //使能,减到零是无动作,采用外部时钟源
    SysTick->VAL=0;            //清零计数器
    do
    {
        temp=SysTick->CTRL;       //读取当前倒计数值
    }
    while((temp&0x01)&&(!(temp&(1<<16))));    //等待时间到达
    SysTick->CTRL=0;    //关闭计数器
    SysTick->VAL=0;        //清空计数器
}


int main()
{
	SystemInit();
	
	//开启afio时钟
	RCC->APB2ENR |= 0x00000001;
	//关闭JTAG
	//AFIO->MAPR = (0x00FFFFFF & AFIO->MAPR)|0x04000000;          
	
	RCC->APB2ENR|=0X0000001c;	//先使能外设IO PORTa,b,c时钟
	GPIOB->CRH=0X33333333;    //推挽输出
	GPIOB->CRL=0X33333333;    //推挽输出
	GPIOC->CRH=0X33333333;    //推挽输出
	GPIOC->CRL=0X33333333;    //推挽输出
	GPIOA->CRH=0X33333333;    //推挽输出
	GPIOA->CRL=0X33333333;    //推挽输出
	
	while (1)
	{
		delay_ms(200);
	     	 
		GPIOC->ODR=0;	  	 //全部输出0
		
		delay_ms(200);
		
		GPIOC->ODR=0xffffffff;	 //全部输出1 

	}
	return 0;
}

四、下载hex程序

编译后生成hex文件,如果没有hex文件,在工程设置里面,Create HEX File选中即可

五、效果

主板开始闪烁

六、调整程序

1、先修改程序闪烁时间

while (1)
{
	delay_ms(1000);
	GPIOC->ODR=0;	  	 //全部输出0
	delay_ms(1000);
	GPIOC->ODR=0xffffffff;	 //全部输出1 
}

2、编译生成hex

3、复位

按一下复位键,主板停止闪烁,处于接收状态。重新下载hex文件,即可进行闪烁。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值