蓝桥杯竞赛板使用笔记
一、 新建工程
略有不同的是程序的下载方法,需要装驱动。。。
二、 LED
电路原理图:
比赛板用的是stm32f103rb芯片,64管脚,LED与LCD同用了管脚PC8~PC15(对应LED1~LED8),所以增用了一个锁存器——M74HC573。在控制LED的时候,只需在输出对应电平后,给锁存器的LE(N—LE,对应PD2)管脚一个上升沿脉冲即可把对应的电平锁存到锁存器的输出端(Q1~Q8),从而控制LED。
需要注意的是:1、LCD的操作会影响LED的亮灭,如LCD的行写会点亮所有的LED,
需进行程序处理;2、对锁存器LE管脚的操作,给一个上升沿脉冲后应把对应的控制引脚(PD2)置低电平,以免LCD的操作影响LED的亮灭混乱。 有关
蜂鸣器的使用比较简单,在这里一起说明:比赛板的蜂鸣器连在PB4上,
需注意的是Pb4管脚是JTAG调试接口之一,需要在程序中失能JTAG才可以使用Pb4管脚,如下语句: /* Disable the Serial Wire Jtag Debug Port SWJ-DP */
GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);
然而程序中用了这一句后,下次用JTAG下载程序时就下载不进去了,解决办法是:先按着开发板的RESET 按键别松手,再点击keil中的下载,然后松手按键,程序就可正常下载进去了。
三、 USART
CT1117开发板的USART2与下载程序的USB方口集成在一起,使用时只需装好对应的驱动即可实现电脑与开发板的串口通信(部分串口调试工具可能搜不到串口)。
比赛时对串口的使用方式可能性比较大的是,通过电脑发送指令控制stm32以执行相应操作,所以我结合LED编写了一个练习程序,使用串口发送指令控制LED亮灭,同时在LCD上显示最近一次所接收到的命令。串口的接收命令使用的是中断的方式,代码如下:
//配置串口2
void USART_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;//PA2 Tx GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;//PA3 Rx GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); USART_InitStructure.USART_BaudRate = 9600;
USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART2, &USART_InitStructure); USART_Cmd(USART2, ENABLE);//使能USART2
/* Configure the NVIC Preemption Priority Bits */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
/* Enable the USARTy Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); }
USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//使能接受中断
//中断服务函数
void USART2_IRQHandler(void) {
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) {
/* Read one byte from the receive data register */ RxBuffer[RxCounter] = USART_ReceiveData(USART2); if(RxBuffer[RxCounter]=='x')//指令格式led2_onx,以’x’作为命令的结尾 { rxflag=1; //接受到命令的标志 RxCounter=0; } else RxCounter++;
if(RxBuffer[0]!='l')//此句避免接受命令混乱
RxCounter=0;
} USART_ClearITPendingBit(USART2,USART_IT_RXNE);// }
//对于通过串口向电脑发送数据,采用printf()函数的重定向 int fputc(int ch,FILE *f) { USART_SendData(USART2,(uint8_t)ch); while (USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET); // delay_ms(10); return ch;
}//库函数中有,复制即可使用
主函数省略,其中主要是调用了一个对命令处理的函数,每次调用处理函数,先判断命
令接受的标志位,若置为1,则对存放命令的数组内容进行判断,从而操作LED并显示当前的命令。
Take care:
1、 sprintf();函数的使用: 字符串转换函数
sprintf(string,”%s%d%c”,”djkal”,a,buffer[5]);
如
其中string可以为u8 string[20];或者u8 *string;类型;但是使用指
针时程序总会卡死在这个函数中 ,调试时换为已指明大小的数组则避免了卡死问题;
2、 怀疑点:串口调试助手在发送数据到MCU时并不仅仅发送你输入的字符串,而有附
加。
3、 通过电脑的串口助手或者超级终端发送指令控制开发板,指令最好自己定义格式。
例如通过串口设置时间,可定义命令格式:A12:02:05B 其中’A’,’B’分别为命令的起始位和停止位,注意电脑发送的是字符串(ASCII码),受到数据后需要转换成数字 , 如数字2和’2’相差48。若只是简单的控制不涉及数字,可以直接对字符进行识别即可。
四、 SysTick
不涉及系统而言,主要用于较精准的延时,用最新的3.5库实现非常容易。
首先调用SysTick_Config(SystemCoreClock/1000);其中SystemCoreClock是内核系统时钟频率,未做修改的话为72M(此函数并不关心此值大小),除以1000,则实现1ms中断一次。然后编写延时函数
void delay_ms(u16 nTime) {
TimingDelay=nTime;//TimingDelay设置为全局变量 while(TimingDelay!=0); }
中断服务函数
void SysTick_Handler(void) { if(TimingDelay>0) TimingDelay--; }
具体代码实现过程:在SysTick_Config中配置了SysTick的中断频率,每次进入中断函数都把全局变量TimingDelay减一,而在延时函数中不断循环查询TimingDelay变量,直至TimingDelay变为0延时结束。
有时需要考虑SysTick的中断优先级问题,如:如果EXTI 的优先级高于Systick中断,则在按键消抖时会造成,在延时10ms消抖的过程中会不断被按键电路的毛刺影响而多次重新进入按键中断,而每次都会重新调用延时10ms,等到按键松手后再延时10ms已经不能读到对应按键的电平状态,不能实现消抖。解决此问题的方法很简单,就是更改SysTick_Config函数中对中断优先级的配置使它高于按键的优先级,具体实现见EXTI_KEY中的讲述。(写的比较啰嗦,大致道理还是比较简单)
五、 EXTI_KEY
本次程序是在USART 的基础之上,加上利用按键控制Led,实现按键与串口同时控制lED的亮灭。较为简单,直接结合原 …… 此处隐藏:2724字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [高等教育]公司协助某村精准扶贫工作总结.doc
- [高等教育]高二生物知识点总结(全)
- [高等教育]苏教版数学三年级下册《解决问题的策略
- [高等教育]仪器分析课程学习心得
- [高等教育]2017年五邑大学数学与计算科学学院333
- [高等教育]人教版七年级下册语文第四单元测试题(
- [高等教育]2018年秋七年级英语上册Unit7Howmuchar
- [高等教育]2017年八年级下数学教学工作小结
- [高等教育]湖南省怀化市2019届高三统一模拟考试(
- [高等教育]四年级下册科学_基础训练及答案教材
- [高等教育]城郊煤矿西风井管路伸缩器更换施工安全
- [高等教育]昆八中20182019学年度上学期期末考试
- [高等教育]项目部各类人员任命书
- [高等教育]上市公司经营水务产业的模式
- [高等教育]人教版高二化学第一学期第三章水溶液中
- [高等教育]【中考物理第一轮复习资料】四.压强与
- [高等教育]金坑水电站报废改建工程机电设备更新改
- [高等教育]高中生物教学工作计划简易版
- [高等教育]2017年西华大学攀枝花学院(联合办学)44
- [高等教育]最新整理超短爆笑英文小笑话大全
- 优秀教师继续教育学习心得体会
- 阳历到阴历的转换
- 留守儿童教育案例分析
- 华师17春秋学期《玩教具制作与环境布置
- 测速传感器新型安装装置的现场应用
- 人教版小学数学三年级下册第四单元
- 创业个人意向书
- 山东省潍坊市2012年高考仿真试题(三)
- [恒心][好卷速递]四川省成都外国语学校
- 多少人错把好转反应当成了病情加重处理
- 中外广播电视史复习资料整理
- 江苏省扬州市江都区宜陵镇中学2014-201
- 工程造价专业毕业实习报告
- 广西师范学院心理与教育统计
- aympkrq基于 - asp的博客网站设计与开
- 建筑业外出经营相关流程操作(营改增后
- 人治 德治 法治
- [精华篇]常识判断专项训练题库
- 中国共产党为什么要实行民主集中
- 小学数学第三册第一单元试卷(A、B、C




