STM32开发踩大坑(技术总监出马救场)
代码中线进行spi初始化,再进行st7789的初始化。在st7789的初始化中,把spi初始化的配置信息pb15和pb13覆盖了,故数据传输不过去。当时st7789是直接拿样例代码过来用的,模拟spi通讯能用,所以当时debug查代码的时候就没往这边想(可以说压根没往这边看)
spi初始化
void SPI2_Init(void){ //SPI2初始化
SPI_InitTypeDef SPI_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
// 使能相关时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Pin = SPI2_MOSI | SPI2_SCK; //SPI2的MOSI(PB15)和SCLK(PB13)为复用推免输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(SPI2PORT,&GPIO_InitStructure);
SPI_InitStructure.SPI_Direction = SPI_Direction_1Line_Tx;//双线输入输出全双工模式
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;//设置为SPI的主机模式(SCK主动产生时钟)
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;//SPI数据大小:发送8位帧数据结构
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;//空闲状态时SCK的状态,High为高电平,Low为低电平
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;//时钟相位,1表示在SCK的奇数沿边采样,2表示偶数沿边采样
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //NSS由软件控件片选
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;//时钟的预分频值(0~256)
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //MSB高位在前
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(SPI2,&SPI_InitStructure); //初始化SPI2的配置项
SPI_Cmd(SPI2,ENABLE); //使能SPI2
}
ST7789初始化
/**
* 功能:ST7789的端口初始化
* 详细说明:初始化了ST7789的SPI和一些其他IO
* 注意:背光的IO口不知道是哪个,没有连接,故在此函数没有对该IO口使能
*/
void ST7789_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructureA;
GPIO_InitTypeDef GPIO_InitStructureB;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); // 使能B端口时钟
// 错误示例
// GPIO_InitStructureB.GPIO_Pin = GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
// 正确示例
GPIO_InitStructureB.GPIO_Pin = GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_14;
// 选择PIN引脚
GPIO_InitStructureB.GPIO_Mode = GPIO_Mode_Out_PP; // 推挽输出
GPIO_InitStructureB.GPIO_Speed = GPIO_Speed_50MHz; // 速度50MHz
GPIO_Init(GPIOB, &GPIO_InitStructureB); // 初始化GPIOB
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 使能A端口时钟
GPIO_InitStructureA.GPIO_Pin = GPIO_Pin_0; // 选择PIN引脚
GPIO_InitStructureA.GPIO_Mode = GPIO_Mode_Out_PP; // 推挽输出
GPIO_InitStructureA.GPIO_Speed = GPIO_Speed_50MHz; // 速度50MHz
GPIO_Init(GPIOA, &GPIO_InitStructureA); // 初始化GPIOB // PIN脚全部置为高电平
}
错误反思
gpio的初始化放在一个文件(各个模块的初始化尽量分文件),不要太散,一个好的编程习惯能省不少事
STM32开发踩大坑(技术总监出马救场)的更多相关文章
- Atitit.cto 与技术总监的区别
Atitit.cto 与技术总监的区别 1. 核心区别1 2. Cto主要职责1 3. 如何提升到cto1 4. CTO五种基本的必备素质:2 5. 2 1. 核心区别 技术总监(Chief Tech ...
- IT软件技术人员的职位路线(从程序员到技术总监) - 部门管理经验谈
以前写过一个文(IT从业者的职业道路(从程序员到部门经理) - 项目管理系列文章),主要介绍笔者的职业发展之路,不过该文需要后续了,因为笔者现在从事的是“产品经理”一职.从笔者的导航文([置顶]博文快 ...
- [转]CTO、技术总监、首席架构师的区别
经常有创业公司老板来拜访我,常常会拜托给我一句话:帮我找一个CTO. 我解释的多了,所以想把这个写下来,看看你到底需要的应该是啥. 一.高级程序员 如果你是一个刚刚创业的公司,公司没有专职产品经理和项 ...
- CTO、技术总监、首席架构师的区别
2016年11月30日13:22:26[转] CTO.技术总监.首席架构师的区别 提升自已的能力,比如专业技术,行业发展趋势,技术发展趋势,协调能力,组织能力,管理能力等[技术总监] 需要从技术总监和 ...
- 【转】】CTO、技术总监、首席架构师的区别
经常有创业公司老板来拜访我,常常会拜托给我一句话:帮我找一个CTO. 我解释的多了,所以想把这个写下来,看看你到底需要的应该是啥. 一.高级程序员 如果你是一个刚刚创业的公司,公司没有专职产品经理和项 ...
- 技术总监和CTO的区别 浅谈CTO的作用----软件公司如何开源节流(一)[转]
我一直在思考软件公司如何开源节流.当然,老板也在思考开源节流.当然,老板思考的开源节流在公司运营层面上,而我作为CTO,我考虑的则是在产品运营角度上来思考这个问题.否则,一个软件公司,它的生存与发展就 ...
- 如何查找STM32开发资料
Ⅰ.概述 该文写给那些处于初学ST芯片开发.英文不好而又想偷懒的人. 该文主要的目的是提醒大家:学习一门技术是需要舍得花功夫,捷径是你在起点与终点之间不断的探索,最终总结出来的一条适合自己的路. 下面 ...
- Linux下STM32开发环境的搭建
目录 一.概述 1.目的 2.开发环境描述 3.Eclipse构建的STM32集成开发环境结构 4.GDB / GDB Server 调试模型 二.搭建步骤 三.详细的搭建过程 1.安装eclipse ...
- 【腾讯Bugly干货分享】总结一个技术总监的教训和经验
本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:http://mp.weixin.qq.com/s/Ry-G0Nikh6m-h3ZVC2cLyQ 导语 20 ...
- [转载]CTO和技术总监区别
原文地址:http://blog.sina.com.cn/s/blog_6024cfa90101cb0h.html 技术总监(Chief Technical Officer)与CTO(Chief Te ...
随机推荐
- 多个子节点收集日志-主节点上传到HDFS
Master: ---------------------- #MasterAgentMasterAgent.channels = c1MasterAgent.sources = s1MasterAg ...
- 【Hive报错】在hue上执行自定义的hive函数报错 Error while compiling statement:FAILED:SemanticException [Error 10011]: Invalid function default.sqlServerdes
在 Hive客户端中使用自定义创建UDF函数时,报"ERROR 10011","invalid function"的异常: 在Hive上自定义创建了一个函数,在 ...
- Java中字符串去除空格
1. str.trim(); 去掉首尾空格 2. str.replace(" ", ""); 去掉所有空格,包括首尾.中间 String str = " ...
- Linux Shell 常用命令 - 01篇
系列文章: Linux Shell 常用命令 - 02篇 0. 在线使用 Linux Shell 参考 https://www.sohu.com/a/343421845_298038 JS/UIX - ...
- SurveillanceStation破解版 SurveillanceStation-x86_64-8.2.2-5766
直接手动安装好套件,许可就是65535.安装的时候提示套件损坏,不理继续安装.不过这个版本有时间炸弹问题,使用几个小时后会出现摄像机消失问题,显示摄像机被删除,但是配置其实是在的.只要禁用套件再启用一 ...
- 洛谷P1464
搜索优化后是记忆化搜索,再优化就是dp了 #include <iostream> #include <utility> using namespace std; typedef ...
- MakeSense标注指南
1.网址 https://www.makesense.ai/ 2.操作流程 2.1 导入 点击get started 点击drop images,上传图片 选择obeject detection 新建 ...
- API是什么
API就是接口,就是通道,负责一个程序和其他软件的沟通,本质是预先定义的函数.譬如我们去办事,窗口就类似一个API,如果对于某一件不简单的事情,这个窗口能做到让我们"最多跑一次", ...
- webgl径向模糊实现体积光
体积光介绍 首先,我们要确认一下什么是体积光.体积光通俗来说是我们能看见的"光路",并不是所有灯光都会形成体积光效果,它是光照到大气中粒子散射后得到的效果(丁达尔效应).我们有时候 ...
- linux 查看crontab任务执行情况
首先创建一个定时任务,例如: */1 * * * * /usr/bin/curl http://******/admin/Keeperclock/keeper >> /data/wwwro ...