- 2025-03-23
-
发表了主题帖:
【MSPM0L1306 LaunchPad】基于spi调试mcp2518fd模块
这一篇学习MSPM0L1306外设spi。本节主要介绍自己画的mcp2518fd模块,是spi转canfd的,由于L1306不像G3507那样,自身带有can,所以想要实现can收发,需要外扩模块。
我们使用的是spi外设,具体原理图如下:
焊接后的模块实物图:
十六脚的芯片就是MCP2518fd芯片,8脚小片为nxp的can转换器。与L1306板的连接图
can发送的数据需要采集器连接。
采样精简版的usb-canfd的分析仪。
软件部分分为sysconfig的设置,及mcp2518fd的初始化及can的配置。
spi的sysconfig配置
我们常用的spi配置不可少,L1306只有一路spi,所以我们选择spi0,设置时钟极性相位帧大小等。温度数据的adc配置,我们沿用前一章节的配置,本章节忽略。
mcp2518fd的配置,我们直接引用官方的driverlib,
我们只需要在主函数调用spi_can内的函数,而spi_can又封装了官方的driverlib库。
我们在主函数中初始化2518以及canfd的配置
主函数中一直获取板载的温度传感器的数值,将数值填充到can发送缓冲区
部分驱动代码见附件
- 2025-03-17
-
回复了主题帖:
【MSPM0L1306 LaunchPad】基于ADC外设读取板载热敏电阻并串口发送
tagetage 发表于 2025-3-13 11:30
TI的MCU还是非常不错的。
大厂的芯片,做的很不错的,资料很全。入门学习值得推荐。
- 2025-03-12
-
发表了主题帖:
【MSPM0L1306 LaunchPad】基于ADC外设读取板载热敏电阻并串口发送
这一篇继续研究MSPM0L1306的外设资源,本节主要用到两个外设UART和ADC,主要实现的功能是MCU通过PA15口(adc功能)读取热敏电阻的变化,读取到原始的电压值进行转换,将对应的温度值通过串口发送出去。
首先解析原理图:
可以看到,原理图上的热敏电阻输出有2路,其中一路给到PA15口,ADC外设进行检测,第二路,也给到了PA25,由于MCU内部有OPA功能。本节讨论第一种。我们按照红色方框内必须跳线。
上图是串口部分的跳线,整版接线图如下:
剩下的就是软件的编写,同样先使用syssconfig工具先配置下adc和uart外设。
ADC我们需要配置时钟分频,采样时间,中断条件,adc的通道和引脚。
UART的配置波特率校验位
我们在软件中还要做一个转换,就是TMP6131的对应关系,
float thermistor(int raw_ADC)
{
VTEMP=0;
THRM_ADC=raw_ADC;
float THRM_A0 = -4.232811E+02;
float THRM_A1 = 4.728797E+02;
float THRM_A2 = -1.988841E+02;
float THRM_A3 = 4.869521E+01;
float THRM_A4 = -1.158754E+00;
VTEMP = (VBias/ADC_BITS)*THRM_ADC;
THRM_TEMP =(THRM_A4*powf(VTEMP,4))+(THRM_A3*powf(VTEMP,3))+(THRM_A2*powf(VTEMP,2))+(THRM_A1*VTEMP)+THRM_A0;
return THRM_TEMP;
}
转换完的浮点数据需要通过串口发出
void UARTprintf(char *f)
{
uint8_t i=0;
while(!(f[i] == *"\n"))
{
DL_UART_Main_transmitDataBlocking(UART_0_INST, f[i]);
i++;
if(i > 30)
break;
}
DL_UART_Main_transmitDataBlocking(UART_0_INST, f[i]);
}
这样可以连续发送字符串。下面进行连续的adc采样
while (1) {
DL_ADC12_startConversion(ADC12_0_INST);
while (false == gCheckADC) {
__WFE();
}
/*
* UART is 8 bits and the ADC result is 16 bits
* Split the ADC result into 2 then send via UART.
*/
gADCResult = DL_ADC12_getMemResult(ADC12_0_INST, DL_ADC12_MEM_IDX_0);
volatile uint8_t lowbyte = (uint8_t)(gADCResult & 0xFF);
volatile uint8_t highbyte = (uint8_t)((gADCResult >> 8) & 0xFF);
adv=thermistor(gADCResult);
sprintf(num,"TMP6131 temp=%.2f℃\n",adv);
UARTprintf(num);
//DL_UART_Main_transmitDataBlocking(UART_0_INST, highbyte);
//DL_UART_Main_transmitDataBlocking(UART_0_INST, lowbyte);
gCheckADC = false;
delay_cycles(10000000);
DL_ADC12_enableConversions(ADC12_0_INST);
}
实际串口视频效果:
- 2025-03-09
-
回复了主题帖:
【MSPM0L1306 LaunchPad】PWM呼吸灯练习
lemonboard 发表于 2025-3-4 15:38
楼主 您这视频效果如何做到的啊
参考ti的例程配合这个板卡的原理图,对应修改下就可以了。
- 2025-03-04
-
发表了主题帖:
【MSPM0L1306 LaunchPad】PWM呼吸灯练习
继上一篇开箱后,环境搭建完后,我们可以学习MSPM0L1306的外设学习,丰富的外设配有多个教程,TI提供了配置工具,可以使得新手快速上手。
通过这个工具的配置,生成cfg文件,在ccs-studio中empty工程中进行打开载入。第二种方法,直接在现有工程中,直接点开cfg,进行配置。我们使用的是第二种方法
在配置之前,我们先了解开发板上led的连接。
使用pwm点亮led,需要用到timer部分的功能,查阅数据手册,我们使用PA13口,带有定时器功能。
用到了表格中的TIMG0_C1的功能。下面,我们就可以通过sysconfig配置工具来使能TIMG0的功能。
使用pwm,需要设置上面的定时器,使能时钟源,设置分频系数。设置下面图中的周期,占空比,
该功能输出到PA13引脚,所以还需要配置LED的功能。
配置完成后,需要在源代码里,修改值即可。
switch (DL_TimerG_getPendingInterrupt(PWM_0_INST)) {
case DL_TIMER_IIDX_LOAD:
if (dc <= 10) {
mode = 1;
} // if reached lowest dc (10%), increase dc
else if (dc >= 90) {
mode = 0;
} // if reached highest dc (90%), decrease dc
if (mode) {
pwm_count -= 20;
dc += 1;
} // up
if (!mode) {
pwm_count += 20;
dc -= 1;
} // down
DL_TimerG_setCaptureCompareValue(PWM_0_INST, pwm_count,
DL_TIMER_CC_1_INDEX); // update ccr1 value
break;
default:
break;
}
[localvideo]e94f81f08c14e091cee9082318620a1a[/localvideo]
- 2025-02-28
-
回复了主题帖:
【回帖赢京东卡】无线技术盛宴第二趴
https://www.digikey.cn/zh/forum/t/topic/4254
- 2025-02-26
-
回复了主题帖:
【AT-START-A403A 车规MCU开发板测评】4寸屏
wangerxian 发表于 2025-2-26 17:26
就是要改一下具体尺寸的寄存器吧
我前一篇tft是240*320,到这一篇480*320,没改分辨率,结果刷屏只刷新了局部,改一下分辨率尺寸就好了。确实同一家的驱动差异不大的。
- 2025-02-25
-
发表了主题帖:
【AT-START-A403A 车规MCU开发板测评】4寸屏
【AT-START-A403A 车规MCU开发板测评】解锁MCU https://bbs.eeworld.com.cn/thread-1306767-1-1.html
【AT-START-A403A 车规MCU开发板测评】硬件spi驱动TFT https://bbs.eeworld.com.cn/thread-1307328-1-1.html
本篇先上效果,
手边有闲置的4寸屏,驱动控制器是st7796s,而前一篇评测里2.0寸的tft用的控制器是st7789的,在代码什么都没改的情况下,直接将引线接入4寸屏。
直接点亮,看来st77xx系列的驱动IC,大部分寄存器配置相似的,之前使用都是用对应的驱动代码,这次新的发现。
-
回复了主题帖:
【AT-START-A403A 车规MCU开发板测评】硬件spi驱动TFT
聪聪哥哥 发表于 2025-2-24 20:24
这个硬件SPI通讯速度是多少?会有通讯异常的情况吗?
通讯OK的。
-
回复了主题帖:
【AT-START-A403A 车规MCU开发板测评】硬件spi驱动TFT
聪聪哥哥 发表于 2025-2-24 20:24
这个硬件SPI通讯速度是多少?会有通讯异常的情况吗?
2分频的,总线100M时钟,分频后50M
- 2025-02-24
-
发表了主题帖:
【AT-START-A403A 车规MCU开发板测评】硬件spi驱动TFT
【AT-START-A403A 车规MCU开发板测评】解锁MCU https://bbs.eeworld.com.cn/thread-1306767-1-1.html
本篇继续评测硬件spi点亮tft。at32a403有多路硬件spi,我们选择了spi1(PA口)进行测试,由于是单项传输到tft,所以spi,只用到了cs,scl,mosi引脚。
首先,开发板硬件连接图:
对应原理图位置:
tft引脚定义:
确保以上连接OK后,进行软件代码的编写。
我们用硬件spi,需要3部分的内容。
第一,GPIO的配置,点亮tft,需要背光的控制BL,复位(RST)的控制,spi配置,命令和数据(C/D)的配置。
gpio_init_type gpio_initstructure;
spi_init_type spi_init_struct;
crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE);
/* software cs PA4, a general io to control TFT cs */
gpio_initstructure.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
gpio_initstructure.gpio_pull = GPIO_PULL_UP;
gpio_initstructure.gpio_mode = GPIO_MODE_OUTPUT;
gpio_initstructure.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
gpio_initstructure.gpio_pins = GPIO_PINS_4;
gpio_init(GPIOA, &gpio_initstructure);
/* C/D PA1 */
gpio_initstructure.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
gpio_initstructure.gpio_pull = GPIO_PULL_UP;
gpio_initstructure.gpio_mode = GPIO_MODE_OUTPUT;
gpio_initstructure.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
gpio_initstructure.gpio_pins = GPIO_PINS_1;
gpio_init(GPIOA, &gpio_initstructure);
/* BL PA2 */
gpio_initstructure.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
gpio_initstructure.gpio_pull = GPIO_PULL_UP;
gpio_initstructure.gpio_mode = GPIO_MODE_OUTPUT;
gpio_initstructure.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
gpio_initstructure.gpio_pins = GPIO_PINS_2;
gpio_init(GPIOA, &gpio_initstructure);
/* RST PA3 */
gpio_initstructure.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
gpio_initstructure.gpio_pull = GPIO_PULL_UP;
gpio_initstructure.gpio_mode = GPIO_MODE_OUTPUT;
gpio_initstructure.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
gpio_initstructure.gpio_pins = GPIO_PINS_3;
gpio_init(GPIOA, &gpio_initstructure);
/* pa5 SCK */
gpio_initstructure.gpio_pull = GPIO_PULL_UP;
gpio_initstructure.gpio_mode = GPIO_MODE_MUX;
gpio_initstructure.gpio_pins = GPIO_PINS_5;
gpio_init(GPIOA, &gpio_initstructure);
/* pa7 SDA */
gpio_initstructure.gpio_pull = GPIO_PULL_UP;
gpio_initstructure.gpio_mode = GPIO_MODE_MUX;
gpio_initstructure.gpio_pins = GPIO_PINS_7;
gpio_init(GPIOA, &gpio_initstructure);
以上是对GPIO的操作。
第二步,用到硬件spi,需要配置spi的功能,需要修改点有分频的配置,软件操作cs片选,半双工模式,只需要给tft发送数据。
TFT_CS_HIGH();
crm_periph_clock_enable(CRM_SPI1_PERIPH_CLOCK, TRUE);
spi_default_para_init(&spi_init_struct);
spi_init_struct.transmission_mode = SPI_TRANSMIT_HALF_DUPLEX_TX;
spi_init_struct.master_slave_mode = SPI_MODE_MASTER;
spi_init_struct.mclk_freq_division = SPI_MCLK_DIV_2;
spi_init_struct.first_bit_transmission = SPI_FIRST_BIT_MSB;
spi_init_struct.frame_bit_num = SPI_FRAME_8BIT;
spi_init_struct.clock_polarity = SPI_CLOCK_POLARITY_HIGH;
spi_init_struct.clock_phase = SPI_CLOCK_PHASE_2EDGE;
spi_init_struct.cs_mode_selection = SPI_CS_SOFTWARE_MODE;
spi_init(SPI1, &spi_init_struct);
spi_enable(SPI1, TRUE);
第三步,进行tft的初始化
void lcd_init(void)
{
LCD_RESET();
LCD_WR_REG(0x11); //Sleep Out
delay_ms(120);
LCD_WR_REG(0x36);
LCD_WR_DATA(0x48);
LCD_WR_REG(0x3A); //Interface Pixel Format
LCD_WR_DATA(0x55);
LCD_WR_REG(0xF0); // Command Set Control
LCD_WR_DATA(0xC3);
LCD_WR_REG(0xF0);
LCD_WR_DATA(0x96);
LCD_WR_REG(0xB4);
LCD_WR_DATA(0x01);
LCD_WR_REG(0xB7);
LCD_WR_DATA(0xC6);
LCD_WR_REG(0xB9);
LCD_WR_DATA(0x02);
LCD_WR_DATA(0xE0);
LCD_WR_REG(0xC0);
LCD_WR_DATA(0x80);
LCD_WR_DATA(0x07);
LCD_WR_REG(0xC1);
LCD_WR_DATA(0x15);
LCD_WR_REG(0xC2);
LCD_WR_DATA(0xA7);
LCD_WR_REG(0xC5); //VCOM Control
LCD_WR_DATA(0x07);
LCD_WR_REG(0xE8);
LCD_WR_DATA(0x40);
LCD_WR_DATA(0x8A);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x29);
LCD_WR_DATA(0x19);
LCD_WR_DATA(0xA5);
LCD_WR_DATA(0x33);
LCD_WR_REG(0xE0);
LCD_WR_DATA(0xF0);
LCD_WR_DATA(0x04);
LCD_WR_DATA(0x0E);
LCD_WR_DATA(0x03);
LCD_WR_DATA(0x02);
LCD_WR_DATA(0x13);
LCD_WR_DATA(0x34);
LCD_WR_DATA(0x44);
LCD_WR_DATA(0x4A);
LCD_WR_DATA(0x3A);
LCD_WR_DATA(0x15);
LCD_WR_DATA(0x15);
LCD_WR_DATA(0x2F);
LCD_WR_DATA(0x34);
LCD_WR_REG(0xE1);
LCD_WR_DATA(0xF0);
LCD_WR_DATA(0x0F);
LCD_WR_DATA(0x16);
LCD_WR_DATA(0x0C);
LCD_WR_DATA(0x09);
LCD_WR_DATA(0x05);
LCD_WR_DATA(0x34);
LCD_WR_DATA(0x43);
LCD_WR_DATA(0x4A);
LCD_WR_DATA(0x35);
LCD_WR_DATA(0x11);
LCD_WR_DATA(0x11);
LCD_WR_DATA(0x2C);
LCD_WR_DATA(0x32);
LCD_WR_REG(0xF0);
LCD_WR_DATA(0x3C);
LCD_WR_REG(0xF0);
LCD_WR_DATA(0x69);
delay_ms(120); // Delay 120ms
LCD_WR_REG(0x21);
LCD_WR_REG(0x29); // Display ON
}
完成上述3步,可以进行点亮tft的操作。
实际效果
刷屏效果如视频
- 2025-02-18
-
回复了主题帖:
【MSPM0L1306 LaunchPad】开箱
oxlm_1 发表于 2025-2-18 09:16
我记得之前看硬禾直播时,TI的这芯片环境都有一些莫名其妙的BUG,要经常重启环境,现在还会这样嘛?
我用的ccs12版本,很稳定的,导入工程,debug什么的,都没有异常。
-
发表了主题帖:
【MSPM0L1306 LaunchPad】开箱
恰春节之际,论坛年终回炉活动非常给力,感谢版主给的试用机会,先发个开箱贴,后续再发详细的测评。
该款控制器是TI公司最新的M0+低功耗mcu,之前有用过TI的MSP430,作为一代经典的低功耗16位mcu,占领市场多年,相信该款M0+的低功耗处理器一样的出色性能,首先先介绍下芯片的资源。
M0内核
Arm® 32 位 Cortex®-M0+ CPU,频率高达 32MHz
工作温度范围:–40°C 至 125°C
宽电源电压范围:1.62V 至 3.6V
程序和运行内存: 64KB 的闪存 4KB 的 SRAM
片内外设资源:
一个具有总计多达 10 个外部通道的 12 位 1.68Msps 模数转换器 (ADC)
可配置的 1.4V 或 2.5V 内部 ADC 电压基准 (VREF)
两个零漂移、零交叉斩波运算放大器 (OPA)
0.5µV/°C 漂移,具有斩波
6pA 输入偏置电流(1)
集成可编程增益级 (1-32x)
一个通用放大器 (GPAMP)
一个具有 8 位基准 DAC 的高速比较器 (COMP)
32ns 传播延迟
低功耗模式,低至 <1µA
ADC、OPA、COMP 和 DAC 之间的可编程模拟连接
集成温度传感器
系统特有的低功耗
运行:71µA/MHz (CoreMark)
停止:4MHz 时为 151µA,32kHz 时为 44µA
待机:32kHz 16 位计时器运行时为 1.0µA,SRAM/寄存器完全保留,32MHz 时钟唤醒时间为 3.2µs
关断:61nA,具有 IO 唤醒能力
MSPM0L1306 LaunchPad开发板的特性:
板载的xds110调试器带有外部调试接口
带有低功耗和超低功耗的调试接口
板载rgb灯,2个按键(一路user,一路nrst)
板载温度,光敏传感器。
可与PC相连的uart接口
丰富的外设接口和资源。
板子正面:
背面:
和手里的高性能的G3507对比:
初始上电后的效果:
软件的环境搭建:
在官网下载ccs软件,对应的版本:
下载ide工具和sdk软件包,我们安装后的软件版本:
开发板上电,会在设备管理器看到xds调试器和调试口:
下一篇,我们将进入具体的外设模块的评测
- 2025-02-17
-
发表了主题帖:
【AT-START-A403A 车规MCU开发板测评】解锁MCU
收到了版主寄的锁死的亚特力A403开发板,据描述,是芯片锁死,无法连接调试器,恰好手边有独立的AT-link和jlink,想尝试一下。本想着打着最坏的打算,买一颗A403芯片替换上去,一看价格20+的价格,我又犹豫了,决定按照官方的手册,进行解锁。
1,首先上电,进行板载的at-link进行连接,提示无法连接,查看手册,需要切换boot0和boot1。同时at官方提供了两个工具
分别用了两个工具,也分别通过串口和usb进行了连接,均提示无法连接,如下图。
板载的at-link不可用,用独立的at-link也是无济于事,按照手册用uart连接。
uart的配置界面
uart配置成功后,会进入第二个界面,会立刻提示主存储器初始化失败,再没有任何可以操作的地方,所以这个方法也行不通,就在准备换新芯片的时候。
群友推荐了AT官方的技术,进行了沟通,我认为该芯片彻底锁死,技术回复,不会的,我不死心,又拿出了jlink-v9,板子恰好有预留标准的jlink口。
进行最后尝试。转机出现了,提示了不同的界面。
这个界面应该就是我心动的界面,解除访问保护,OK,然后断电,重新用板载link工具下载调试,一切顺利。下面跑个流水灯。
最后还是要感谢版主给我这次解锁机会。
[localvideo]bb0d15593c00d0382597761867fb9fc5[/localvideo]
- 2025-01-19
-
回复了主题帖:
【测评入围名单(最后1批)】年终回炉:FPGA、AI、高性能MCU、书籍等65个测品邀你来~
个人信息无误, 确认可以完成测评计划
- 2024-11-24
-
加入了学习《基于 TI Sitara?AM5708 的工业派》,观看 1.5 AM5708 工业派-深度学习 TIDL + OPC UA + AM65xx
-
加入了学习《基于 TI Sitara?AM5708 的工业派》,观看 1.4 AM5708 工业派-应用方向和操作系统与软件框架
-
加入了学习《基于 TI Sitara?AM5708 的工业派》,观看 1.2 AM5708 工业派 - 匠牛社区与工业派
-
加入了学习《基于 TI Sitara?AM5708 的工业派》,观看 1.1 AM5708 工业派介绍
- 2024-11-08
-
加入了学习《littlefulse 多元新技术赋能安全可靠和高效》,观看 LIT-3762-23_TTapeCaptions-CN