一、主板的连接
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文件,即可进行闪烁。