当前位置: 代码迷 >> 综合 >> [stm32] stm32f103c8t6 mini的blink程序
  详细解决方案

[stm32] stm32f103c8t6 mini的blink程序

热度:54   发布时间:2024-01-29 17:30:42.0

一、主板的连接

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;	  	 //全部输出0delay_ms(200);GPIOC->ODR=0xffffffff;	 //全部输出1 }return 0;
}

四、下载hex程序

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

五、效果

主板开始闪烁

六、调整程序

1、先修改程序闪烁时间

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

2、编译生成hex

3、复位

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